Thread (36 messages) 36 messages, 7 authors, 2017-03-31
STALE3350d

[PATCH 5/5] net/vhost: remove limit of vhost RX burst size

From: Zhiyong Yang <hidden>
Date: 2017-02-24 08:48:31
Subsystem: networking drivers, the rest · Maintainers: Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds

vhost removes limit of RX burst size(32 pkts) and supports to make
an best effort to receive pkts.

Cc: yuanhan.liu@linux.intel.com
Cc: maxime.coquelin@redhat.com

Signed-off-by: Zhiyong Yang <redacted>
---
 drivers/net/vhost/rte_eth_vhost.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index 1e1fa34..8a97c2a 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -402,9 +402,28 @@ eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)
 		goto out;
 
 	/* Dequeue packets from guest TX queue */
-	nb_rx = rte_vhost_dequeue_burst(r->vid,
-			r->virtqueue_id, r->mb_pool, bufs, nb_bufs);
+	if (likely(nb_bufs <= VHOST_MAX_PKT_BURST))
+		nb_rx = rte_vhost_dequeue_burst(r->vid, r->virtqueue_id,
+						r->mb_pool, bufs, nb_bufs);
+	else {
+		uint16_t nb_receive = nb_bufs;
+
+		while (nb_receive) {
+			uint16_t nb_pkts;
+			uint16_t num = (uint16_t)RTE_MIN(nb_receive,
+					VHOST_MAX_PKT_BURST);
 
+			nb_pkts = rte_vhost_dequeue_burst(r->vid,
+							  r->virtqueue_id,
+							  r->mb_pool,
+							  &bufs[nb_rx], num);
+
+			nb_rx += nb_pkts;
+			nb_receive -= nb_pkts;
+			if (nb_pkts < num)
+				break;
+		}
+	}
 	r->stats.pkts += nb_rx;
 
 	for (i = 0; likely(i < nb_rx); i++) {
-- 
2.7.4
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help