From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <sthemmin@microsoft.com>
Subject: [dpdk-dev] [PATCH v2 1/2] net/netvsc: reset mbuf port on VF receive
Date: Tue, 30 Apr 2019 11:12:16 -0700 [thread overview]
Message-ID: <20190430181217.20875-2-stephen@networkplumber.org> (raw)
Message-ID: <20190430181216.cWFuF5NOEZxRzGu96VJkx5Xgbt36X4RWZ9Scszk25cA@z> (raw)
In-Reply-To: <20190430181217.20875-1-stephen@networkplumber.org>
From: Stephen Hemminger <sthemmin@microsoft.com>
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>
Fixes: dc7680e8597c ("net/netvsc: support integrated VF")
---
v2 - add fixes
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
next prev parent reply other threads:[~2019-04-30 18:12 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-29 20:33 [dpdk-dev] [PATCH 0/2] netvsc pmd fixes for 19.05 Stephen Hemminger
2019-04-29 20:33 ` Stephen Hemminger
2019-04-29 20:33 ` [dpdk-dev] [PATCH 1/2] net/netvsc: reset mbuf port on VF receive Stephen Hemminger
2019-04-29 20:33 ` Stephen Hemminger
2019-04-30 8:01 ` Ferruh Yigit
2019-04-30 8:01 ` Ferruh Yigit
2019-04-30 15:05 ` Stephen Hemminger
2019-04-30 15:05 ` Stephen Hemminger
2019-04-29 20:33 ` [dpdk-dev] [PATCH 2/2] net/netvsc: free all queues on close Stephen Hemminger
2019-04-29 20:33 ` Stephen Hemminger
2019-04-30 8:11 ` Ferruh Yigit
2019-04-30 8:11 ` Ferruh Yigit
2019-04-30 18:12 ` [dpdk-dev] [PATCH v2 0/2] netvsc PMD fixes for 19.05 Stephen Hemminger
2019-04-30 18:12 ` Stephen Hemminger
2019-04-30 18:12 ` Stephen Hemminger [this message]
2019-04-30 18:12 ` [dpdk-dev] [PATCH v2 1/2] net/netvsc: reset mbuf port on VF receive Stephen Hemminger
2019-04-30 18:12 ` [dpdk-dev] [PATCH v2 2/2] net/netvsc: free all queues on close Stephen Hemminger
2019-04-30 18:12 ` Stephen Hemminger
2019-05-02 18:24 ` [dpdk-dev] [PATCH v2 0/2] netvsc PMD fixes for 19.05 Ferruh Yigit
2019-05-02 18:24 ` Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190430181217.20875-2-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=sthemmin@microsoft.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).