From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <stephen@networkplumber.org>
Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com
 [209.85.215.194]) by dpdk.org (Postfix) with ESMTP id E69321B0FC
 for <dev@dpdk.org>; Mon, 29 Apr 2019 22:33:30 +0200 (CEST)
Received: by mail-pg1-f194.google.com with SMTP id k19so5727218pgh.0
 for <dev@dpdk.org>; Mon, 29 Apr 2019 13:33:30 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=networkplumber-org.20150623.gappssmtp.com; s=20150623;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=i7DW84J98xtYsHSCazKAw1dQxO0fxpn1GAfMrRLtML4=;
 b=MMAZr4oOnQgudSdBJGfJ9s7z3n/fF9eX7qDAdVYs/PCyJYknaYVxR3hrE2l6cYMss0
 Rn0V1GjaFsABnyRosDYB4pVCNHaRFOJ7vzmTU769T+V9c8wXcuNsWDxOF2JCG0924MTa
 rUWm058Gc6WTg3ApHJyrgg4bm80P2A8KO8oWLNxfEu/rmSGTs2eJmnrkX8CM8lLtOefJ
 xVykXm3cc+LLJNieGWnPBbgeNHstDvXbNTeKE3iYzgXZOd/qe2iSgvPIo80YtRz3NziE
 ucAWW6xAJTl2IfNu5/YoR5ucHW5X+EdqQHLERiE3nnhLeom5//hw209nXdMQqGxT2DAF
 bSqA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=i7DW84J98xtYsHSCazKAw1dQxO0fxpn1GAfMrRLtML4=;
 b=D9/ToB4le0H5aBlPtJ7Z2ZkQlzzI9TWfdZYxpG3cu4c1gQuZpfXuQNUEQGBAMDDm2M
 4X09W62KVDVv0Drv7FYx3T4wH8hbd4vdYV61pFF7oRRe13sx9yXugY5fNGMynfK7laDO
 dNUBKDo64ujKvm6651hM+11T+RZkDaJraXRBkfW8qMhgKfeITIP2p0NhbDkbEV1kG3c4
 DYLPFCFjKjpKTBONciomi6BUTLmEDNru+42934xhJwMFDwbB4KS5fH92QvZvJGVhBEOP
 oPZdEEX0KwvXMcV1pqIoSx2JuGTLB4vcmBnK37fkKqK+fHPcYW9N2WmB4FLSkS0+G+jT
 vF1g==
X-Gm-Message-State: APjAAAWvZn8629dkUMjrZTVe8MdTnt+RLNVK3w+gpkNQ9zcgnf//Rn6T
 VHQ70gVaO/AzsaREOPobx+9pk34xf38=
X-Google-Smtp-Source: APXvYqzsg5CcUyxH93GSan0cDrX/mujsOXe2qpS4IHP/NDmJjgYxpAzH3k0YLTcFIrZrYfaBKrjJyw==
X-Received: by 2002:a62:594b:: with SMTP id n72mr10706084pfb.186.1556570009856; 
 Mon, 29 Apr 2019 13:33:29 -0700 (PDT)
Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127])
 by smtp.gmail.com with ESMTPSA id i4sm3557424pfa.44.2019.04.29.13.33.28
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 29 Apr 2019 13:33:28 -0700 (PDT)
From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
 Stephen Hemminger <sthemmin@microsoft.com>
Date: Mon, 29 Apr 2019 13:33:24 -0700
Message-Id: <20190429203325.10696-2-stephen@networkplumber.org>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190429203325.10696-1-stephen@networkplumber.org>
References: <20190429203325.10696-1-stephen@networkplumber.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Subject: [dpdk-dev] [PATCH 1/2] net/netvsc: reset mbuf port on VF receive
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Mon, 29 Apr 2019 20:33:31 -0000

Redo the receive logic to set m->port on packets received on VF.

When using VF, still need to check for packets and completions
arriving on the VMBus path even if application is not doing bursting
(ie n_rx == 0).

Also, fix comment.

Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
---
 drivers/net/netvsc/hn_rxtx.c | 47 +++++++++++++++++++++---------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c
index c67e9ae25376..7856f7e6ec48 100644
--- a/drivers/net/netvsc/hn_rxtx.c
+++ b/drivers/net/netvsc/hn_rxtx.c
@@ -1393,6 +1393,24 @@ hn_xmit_pkts(void *ptxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 	return nb_tx;
 }
 
+static uint16_t
+hn_recv_vf(uint16_t vf_port, const struct hn_rx_queue *rxq,
+	   struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
+{
+	uint16_t i, n;
+
+	if (unlikely(nb_pkts == 0))
+		return 0;
+
+	n = rte_eth_rx_burst(vf_port, rxq->queue_id, rx_pkts, nb_pkts);
+
+	/* relabel the received mbufs */
+	for (i = 0; i < n; i++)
+		rx_pkts[i]->port = rxq->port_id;
+
+	return n;
+}
+
 uint16_t
 hn_recv_pkts(void *prxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 {
@@ -1404,30 +1422,21 @@ hn_recv_pkts(void *prxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 	if (unlikely(hv->closed))
 		return 0;
 
-	/* Transmit over VF if present and up */
+	/* Receive from VF if present and up */
 	vf_dev = hn_get_vf_dev(hv);
 
-	if (vf_dev && vf_dev->data->dev_started) {
-		/* Normally, with SR-IOV the ring buffer will be empty */
+	/* Check for new completions */
+	if (likely(rte_ring_count(rxq->rx_ring) < nb_pkts))
 		hn_process_events(hv, rxq->queue_id, 0);
 
-		/* Get mbufs some bufs off of staging ring */
-		nb_rcv = rte_ring_sc_dequeue_burst(rxq->rx_ring,
-						   (void **)rx_pkts,
-						   nb_pkts / 2, NULL);
-		/* And rest off of VF */
-		nb_rcv += rte_eth_rx_burst(vf_dev->data->port_id,
-					   rxq->queue_id,
-					   rx_pkts + nb_rcv, nb_pkts - nb_rcv);
-	} else {
-		/* If receive ring is not full then get more */
-		if (rte_ring_count(rxq->rx_ring) < nb_pkts)
-			hn_process_events(hv, rxq->queue_id, 0);
+	/* Always check the vmbus path for multicast and new flows */
+	nb_rcv = rte_ring_sc_dequeue_burst(rxq->rx_ring,
+					   (void **)rx_pkts, nb_pkts, NULL);
 
-		nb_rcv = rte_ring_sc_dequeue_burst(rxq->rx_ring,
-						   (void **)rx_pkts,
-						   nb_pkts, NULL);
-	}
+	/* If VF is available, check that as well */
+	if (vf_dev && vf_dev->data->dev_started)
+		nb_rcv += hn_recv_vf(vf_dev->data->port_id, rxq,
+				     rx_pkts + nb_rcv, nb_pkts - nb_rcv);
 
 	return nb_rcv;
 }
-- 
2.20.1

From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by dpdk.space (Postfix) with ESMTP id 77994A0679
	for <public@inbox.dpdk.org>; Mon, 29 Apr 2019 22:33:42 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 81E071B0FF;
	Mon, 29 Apr 2019 22:33:35 +0200 (CEST)
Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com
 [209.85.215.194]) by dpdk.org (Postfix) with ESMTP id E69321B0FC
 for <dev@dpdk.org>; Mon, 29 Apr 2019 22:33:30 +0200 (CEST)
Received: by mail-pg1-f194.google.com with SMTP id k19so5727218pgh.0
 for <dev@dpdk.org>; Mon, 29 Apr 2019 13:33:30 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=networkplumber-org.20150623.gappssmtp.com; s=20150623;
 h=from:to:cc:subject:date:message-id:in-reply-to:references
 :mime-version:content-transfer-encoding;
 bh=i7DW84J98xtYsHSCazKAw1dQxO0fxpn1GAfMrRLtML4=;
 b=MMAZr4oOnQgudSdBJGfJ9s7z3n/fF9eX7qDAdVYs/PCyJYknaYVxR3hrE2l6cYMss0
 Rn0V1GjaFsABnyRosDYB4pVCNHaRFOJ7vzmTU769T+V9c8wXcuNsWDxOF2JCG0924MTa
 rUWm058Gc6WTg3ApHJyrgg4bm80P2A8KO8oWLNxfEu/rmSGTs2eJmnrkX8CM8lLtOefJ
 xVykXm3cc+LLJNieGWnPBbgeNHstDvXbNTeKE3iYzgXZOd/qe2iSgvPIo80YtRz3NziE
 ucAWW6xAJTl2IfNu5/YoR5ucHW5X+EdqQHLERiE3nnhLeom5//hw209nXdMQqGxT2DAF
 bSqA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version:content-transfer-encoding;
 bh=i7DW84J98xtYsHSCazKAw1dQxO0fxpn1GAfMrRLtML4=;
 b=D9/ToB4le0H5aBlPtJ7Z2ZkQlzzI9TWfdZYxpG3cu4c1gQuZpfXuQNUEQGBAMDDm2M
 4X09W62KVDVv0Drv7FYx3T4wH8hbd4vdYV61pFF7oRRe13sx9yXugY5fNGMynfK7laDO
 dNUBKDo64ujKvm6651hM+11T+RZkDaJraXRBkfW8qMhgKfeITIP2p0NhbDkbEV1kG3c4
 DYLPFCFjKjpKTBONciomi6BUTLmEDNru+42934xhJwMFDwbB4KS5fH92QvZvJGVhBEOP
 oPZdEEX0KwvXMcV1pqIoSx2JuGTLB4vcmBnK37fkKqK+fHPcYW9N2WmB4FLSkS0+G+jT
 vF1g==
X-Gm-Message-State: APjAAAWvZn8629dkUMjrZTVe8MdTnt+RLNVK3w+gpkNQ9zcgnf//Rn6T
 VHQ70gVaO/AzsaREOPobx+9pk34xf38=
X-Google-Smtp-Source: APXvYqzsg5CcUyxH93GSan0cDrX/mujsOXe2qpS4IHP/NDmJjgYxpAzH3k0YLTcFIrZrYfaBKrjJyw==
X-Received: by 2002:a62:594b:: with SMTP id n72mr10706084pfb.186.1556570009856; 
 Mon, 29 Apr 2019 13:33:29 -0700 (PDT)
Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127])
 by smtp.gmail.com with ESMTPSA id i4sm3557424pfa.44.2019.04.29.13.33.28
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 29 Apr 2019 13:33:28 -0700 (PDT)
From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
 Stephen Hemminger <sthemmin@microsoft.com>
Date: Mon, 29 Apr 2019 13:33:24 -0700
Message-Id: <20190429203325.10696-2-stephen@networkplumber.org>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190429203325.10696-1-stephen@networkplumber.org>
References: <20190429203325.10696-1-stephen@networkplumber.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Subject: [dpdk-dev] [PATCH 1/2] net/netvsc: reset mbuf port on VF receive
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>
Content-Type: text/plain; charset="UTF-8"
Message-ID: <20190429203324.8DDu9fLuf7oHM4Y-1Sd_MDmITipTDcQBSywYH01msOE@z>

Redo the receive logic to set m->port on packets received on VF.

When using VF, still need to check for packets and completions
arriving on the VMBus path even if application is not doing bursting
(ie n_rx == 0).

Also, fix comment.

Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
---
 drivers/net/netvsc/hn_rxtx.c | 47 +++++++++++++++++++++---------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c
index c67e9ae25376..7856f7e6ec48 100644
--- a/drivers/net/netvsc/hn_rxtx.c
+++ b/drivers/net/netvsc/hn_rxtx.c
@@ -1393,6 +1393,24 @@ hn_xmit_pkts(void *ptxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 	return nb_tx;
 }
 
+static uint16_t
+hn_recv_vf(uint16_t vf_port, const struct hn_rx_queue *rxq,
+	   struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
+{
+	uint16_t i, n;
+
+	if (unlikely(nb_pkts == 0))
+		return 0;
+
+	n = rte_eth_rx_burst(vf_port, rxq->queue_id, rx_pkts, nb_pkts);
+
+	/* relabel the received mbufs */
+	for (i = 0; i < n; i++)
+		rx_pkts[i]->port = rxq->port_id;
+
+	return n;
+}
+
 uint16_t
 hn_recv_pkts(void *prxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 {
@@ -1404,30 +1422,21 @@ hn_recv_pkts(void *prxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 	if (unlikely(hv->closed))
 		return 0;
 
-	/* Transmit over VF if present and up */
+	/* Receive from VF if present and up */
 	vf_dev = hn_get_vf_dev(hv);
 
-	if (vf_dev && vf_dev->data->dev_started) {
-		/* Normally, with SR-IOV the ring buffer will be empty */
+	/* Check for new completions */
+	if (likely(rte_ring_count(rxq->rx_ring) < nb_pkts))
 		hn_process_events(hv, rxq->queue_id, 0);
 
-		/* Get mbufs some bufs off of staging ring */
-		nb_rcv = rte_ring_sc_dequeue_burst(rxq->rx_ring,
-						   (void **)rx_pkts,
-						   nb_pkts / 2, NULL);
-		/* And rest off of VF */
-		nb_rcv += rte_eth_rx_burst(vf_dev->data->port_id,
-					   rxq->queue_id,
-					   rx_pkts + nb_rcv, nb_pkts - nb_rcv);
-	} else {
-		/* If receive ring is not full then get more */
-		if (rte_ring_count(rxq->rx_ring) < nb_pkts)
-			hn_process_events(hv, rxq->queue_id, 0);
+	/* Always check the vmbus path for multicast and new flows */
+	nb_rcv = rte_ring_sc_dequeue_burst(rxq->rx_ring,
+					   (void **)rx_pkts, nb_pkts, NULL);
 
-		nb_rcv = rte_ring_sc_dequeue_burst(rxq->rx_ring,
-						   (void **)rx_pkts,
-						   nb_pkts, NULL);
-	}
+	/* If VF is available, check that as well */
+	if (vf_dev && vf_dev->data->dev_started)
+		nb_rcv += hn_recv_vf(vf_dev->data->port_id, rxq,
+				     rx_pkts + nb_rcv, nb_pkts - nb_rcv);
 
 	return nb_rcv;
 }
-- 
2.20.1