From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: chas3@att.com, p.oltarzewski@gmail.com, stable@dpdk.org
Subject: [dpdk-dev] [PATCH 2/4] net/bonding: fix LACP fast queue Rx handler
Date: Wed, 10 Apr 2019 14:53:47 +0200 [thread overview]
Message-ID: <1554900829-16180-3-git-send-email-david.marchand@redhat.com> (raw)
Message-ID: <20190410125347.3SWTa_416EH5VQv1QsJcdOXVzYuHkrDB8xwQTzkzCug@z> (raw)
In-Reply-To: <1554900829-16180-1-git-send-email-david.marchand@redhat.com>
fast queue Rx burst function is missing checks on promisc and the
slave collecting state.
Define an inline wrapper to have a common base.
Fixes: 112891cd27e5 ("net/bonding: add dedicated HW queues for LACP control")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
drivers/net/bonding/rte_eth_bond_pmd.c | 73 +++++++++++++---------------------
1 file changed, 27 insertions(+), 46 deletions(-)
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index c193d6d..989be5c 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -256,48 +256,9 @@
return 0;
}
-static uint16_t
-bond_ethdev_rx_burst_8023ad_fast_queue(void *queue, struct rte_mbuf **bufs,
- uint16_t nb_pkts)
-{
- struct bond_rx_queue *bd_rx_q = (struct bond_rx_queue *)queue;
- struct bond_dev_private *internals = bd_rx_q->dev_private;
- uint16_t num_rx_total = 0; /* Total number of received packets */
- uint16_t slaves[RTE_MAX_ETHPORTS];
- uint16_t slave_count;
- uint16_t active_slave;
- uint16_t i;
-
- /* Copy slave list to protect against slave up/down changes during tx
- * bursting */
- slave_count = internals->active_slave_count;
- active_slave = internals->active_slave;
- memcpy(slaves, internals->active_slaves,
- sizeof(internals->active_slaves[0]) * slave_count);
-
- for (i = 0; i < slave_count && nb_pkts; i++) {
- uint16_t num_rx_slave;
-
- /* Read packets from this slave */
- num_rx_slave = rte_eth_rx_burst(slaves[active_slave],
- bd_rx_q->queue_id,
- bufs + num_rx_total, nb_pkts);
- num_rx_total += num_rx_slave;
- nb_pkts -= num_rx_slave;
-
- if (++active_slave == slave_count)
- active_slave = 0;
- }
-
- if (++internals->active_slave >= slave_count)
- internals->active_slave = 0;
-
- return num_rx_total;
-}
-
-static uint16_t
-bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs,
- uint16_t nb_pkts)
+static inline uint16_t
+rx_burst_8023ad(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts,
+ bool dedicated_rxq)
{
/* Cast to structure, containing bonded device's port id and queue id */
struct bond_rx_queue *bd_rx_q = (struct bond_rx_queue *)queue;
@@ -357,10 +318,16 @@
hdr = rte_pktmbuf_mtod(bufs[j], struct ether_hdr *);
subtype = ((struct slow_protocol_frame *)hdr)->slow_protocol.subtype;
- /* Remove packet from array if it is slow packet or slave is not
- * in collecting state or bonding interface is not in promiscuous
- * mode and packet address does not match. */
- if (unlikely(is_lacp_packets(hdr->ether_type, subtype, bufs[j]) ||
+ /* Remove packet from array if:
+ * - it is slow packet but no dedicated rxq is present,
+ * - slave is not in collecting state,
+ * - bonding interface is not in promiscuous mode and
+ * packet is not multicast and address does not match,
+ */
+ if (unlikely(
+ (!dedicated_rxq &&
+ is_lacp_packets(hdr->ether_type, subtype,
+ bufs[j])) ||
!collecting ||
(!promisc &&
!is_multicast_ether_addr(&hdr->d_addr) &&
@@ -392,6 +359,20 @@
return num_rx_total;
}
+static uint16_t
+bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs,
+ uint16_t nb_pkts)
+{
+ return rx_burst_8023ad(queue, bufs, nb_pkts, false);
+}
+
+static uint16_t
+bond_ethdev_rx_burst_8023ad_fast_queue(void *queue, struct rte_mbuf **bufs,
+ uint16_t nb_pkts)
+{
+ return rx_burst_8023ad(queue, bufs, nb_pkts, true);
+}
+
#if defined(RTE_LIBRTE_BOND_DEBUG_ALB) || defined(RTE_LIBRTE_BOND_DEBUG_ALB_L1)
uint32_t burstnumberRX;
uint32_t burstnumberTX;
--
1.8.3.1
next prev parent reply other threads:[~2019-04-10 12:54 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-10 12:53 [dpdk-dev] [PATCH 0/4] lacp rx/tx handlers fixes for bonding pmd David Marchand
2019-04-10 12:53 ` David Marchand
2019-04-10 12:53 ` [dpdk-dev] [PATCH 1/4] net/bonding: fix oob access in LACP mode when sending many packets David Marchand
2019-04-10 12:53 ` David Marchand
2019-04-10 12:53 ` David Marchand [this message]
2019-04-10 12:53 ` [dpdk-dev] [PATCH 2/4] net/bonding: fix LACP fast queue Rx handler David Marchand
2019-04-12 14:01 ` Chas Williams
2019-04-12 14:01 ` Chas Williams
2019-04-18 7:11 ` David Marchand
2019-04-18 7:11 ` David Marchand
2019-04-18 22:50 ` Chas Williams
2019-04-18 22:50 ` Chas Williams
2019-05-16 9:12 ` David Marchand
2019-05-16 9:12 ` David Marchand
2019-07-02 15:01 ` Ferruh Yigit
2019-08-14 1:43 ` Chas Williams
2019-08-19 9:41 ` David Marchand
2019-04-10 12:53 ` [dpdk-dev] [PATCH 3/4] net/bonding: fix unicast packets filtering when not in promisc David Marchand
2019-04-10 12:53 ` David Marchand
2019-04-10 12:53 ` [dpdk-dev] [PATCH 4/4] net/bonding: prefer allmulti to promisc for LACP David Marchand
2019-04-10 12:53 ` David Marchand
2019-06-27 8:08 ` [dpdk-dev] [PATCH 0/4] lacp rx/tx handlers fixes for bonding pmd Ferruh Yigit
2019-06-27 12:07 ` WILLIAMS, CHARLES J
2019-06-27 12:19 ` Chas Williams
2019-08-22 16:48 ` Yigit, Ferruh
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=1554900829-16180-3-git-send-email-david.marchand@redhat.com \
--to=david.marchand@redhat.com \
--cc=chas3@att.com \
--cc=dev@dpdk.org \
--cc=p.oltarzewski@gmail.com \
--cc=stable@dpdk.org \
/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).