patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH 1/1] net/qede: fix receive packet drop
@ 2019-03-12 16:51 Shahed Shaikh
  2019-03-13 17:55 ` [dpdk-stable] [dpdk-dev] " Rasesh Mody
  0 siblings, 1 reply; 3+ messages in thread
From: Shahed Shaikh @ 2019-03-12 16:51 UTC (permalink / raw)
  To: dev; +Cc: rmody, ferruh.yigit, stable

There is a corner case in which driver won't post
receive buffers when driver has processed all received packets
in single loop (i.e. hw_consumer == sw_consumer) and then
HW will start dropping packets since it did not see new receive
buffers posted.

This corner case is seen when size of Rx ring is less than or equals
Rx packet burst count for dev->rx_pkt_burst().

Fixes: 8f2312474529 ("net/qede: fix performance bottleneck in Rx path")
Cc: stable@dpdk.org

Signed-off-by: Shahed Shaikh <shshaikh@marvell.com>
---
 drivers/net/qede/qede_rxtx.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c
index 70c32e3..27bac09 100644
--- a/drivers/net/qede/qede_rxtx.c
+++ b/drivers/net/qede/qede_rxtx.c
@@ -1420,13 +1420,6 @@ qede_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 	uint32_t rss_hash;
 	int rx_alloc_count = 0;
 
-	hw_comp_cons = rte_le_to_cpu_16(*rxq->hw_cons_ptr);
-	sw_comp_cons = ecore_chain_get_cons_idx(&rxq->rx_comp_ring);
-
-	rte_rmb();
-
-	if (hw_comp_cons == sw_comp_cons)
-		return 0;
 
 	/* Allocate buffers that we used in previous loop */
 	if (rxq->rx_alloc_count) {
@@ -1447,6 +1440,14 @@ qede_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 		rxq->rx_alloc_count = 0;
 	}
 
+	hw_comp_cons = rte_le_to_cpu_16(*rxq->hw_cons_ptr);
+	sw_comp_cons = ecore_chain_get_cons_idx(&rxq->rx_comp_ring);
+
+	rte_rmb();
+
+	if (hw_comp_cons == sw_comp_cons)
+		return 0;
+
 	while (sw_comp_cons != hw_comp_cons) {
 		ol_flags = 0;
 		packet_type = RTE_PTYPE_UNKNOWN;
-- 
2.7.4

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 1/1] net/qede: fix receive packet drop
  2019-03-12 16:51 [dpdk-stable] [PATCH 1/1] net/qede: fix receive packet drop Shahed Shaikh
@ 2019-03-13 17:55 ` Rasesh Mody
  2019-03-19 19:01   ` Ferruh Yigit
  0 siblings, 1 reply; 3+ messages in thread
From: Rasesh Mody @ 2019-03-13 17:55 UTC (permalink / raw)
  To: Shahed Shaikh, dev; +Cc: ferruh.yigit, stable

>From: dev <dev-bounces@dpdk.org> On Behalf Of Shahed Shaikh
>Sent: Tuesday, March 12, 2019 9:51 AM
>
>There is a corner case in which driver won't post receive buffers when driver
>has processed all received packets in single loop (i.e. hw_consumer ==
>sw_consumer) and then HW will start dropping packets since it did not see
>new receive buffers posted.
>
>This corner case is seen when size of Rx ring is less than or equals Rx packet
>burst count for dev->rx_pkt_burst().
>
>Fixes: 8f2312474529 ("net/qede: fix performance bottleneck in Rx path")
>Cc: stable@dpdk.org
>
>Signed-off-by: Shahed Shaikh <shshaikh@marvell.com>
>---

Acked-by: Rasesh Mody <rmody@marvell.com>

> drivers/net/qede/qede_rxtx.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
>diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c
>index 70c32e3..27bac09 100644
>--- a/drivers/net/qede/qede_rxtx.c
>+++ b/drivers/net/qede/qede_rxtx.c
>@@ -1420,13 +1420,6 @@ qede_recv_pkts(void *p_rxq, struct rte_mbuf
>**rx_pkts, uint16_t nb_pkts)
> 	uint32_t rss_hash;
> 	int rx_alloc_count = 0;
>
>-	hw_comp_cons = rte_le_to_cpu_16(*rxq->hw_cons_ptr);
>-	sw_comp_cons = ecore_chain_get_cons_idx(&rxq->rx_comp_ring);
>-
>-	rte_rmb();
>-
>-	if (hw_comp_cons == sw_comp_cons)
>-		return 0;
>
> 	/* Allocate buffers that we used in previous loop */
> 	if (rxq->rx_alloc_count) {
>@@ -1447,6 +1440,14 @@ qede_recv_pkts(void *p_rxq, struct rte_mbuf
>**rx_pkts, uint16_t nb_pkts)
> 		rxq->rx_alloc_count = 0;
> 	}
>
>+	hw_comp_cons = rte_le_to_cpu_16(*rxq->hw_cons_ptr);
>+	sw_comp_cons = ecore_chain_get_cons_idx(&rxq->rx_comp_ring);
>+
>+	rte_rmb();
>+
>+	if (hw_comp_cons == sw_comp_cons)
>+		return 0;
>+
> 	while (sw_comp_cons != hw_comp_cons) {
> 		ol_flags = 0;
> 		packet_type = RTE_PTYPE_UNKNOWN;
>--
>2.7.4

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH 1/1] net/qede: fix receive packet drop
  2019-03-13 17:55 ` [dpdk-stable] [dpdk-dev] " Rasesh Mody
@ 2019-03-19 19:01   ` Ferruh Yigit
  0 siblings, 0 replies; 3+ messages in thread
From: Ferruh Yigit @ 2019-03-19 19:01 UTC (permalink / raw)
  To: Rasesh Mody, Shahed Shaikh, dev; +Cc: stable

On 3/13/2019 5:55 PM, Rasesh Mody wrote:
>> From: dev <dev-bounces@dpdk.org> On Behalf Of Shahed Shaikh
>> Sent: Tuesday, March 12, 2019 9:51 AM
>>
>> There is a corner case in which driver won't post receive buffers when driver
>> has processed all received packets in single loop (i.e. hw_consumer ==
>> sw_consumer) and then HW will start dropping packets since it did not see
>> new receive buffers posted.
>>
>> This corner case is seen when size of Rx ring is less than or equals Rx packet
>> burst count for dev->rx_pkt_burst().
>>
>> Fixes: 8f2312474529 ("net/qede: fix performance bottleneck in Rx path")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Shahed Shaikh <shshaikh@marvell.com>
>> ---
> 
> Acked-by: Rasesh Mody <rmody@marvell.com>

Applied to dpdk-next-net/master, thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-03-19 19:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-12 16:51 [dpdk-stable] [PATCH 1/1] net/qede: fix receive packet drop Shahed Shaikh
2019-03-13 17:55 ` [dpdk-stable] [dpdk-dev] " Rasesh Mody
2019-03-19 19:01   ` Ferruh Yigit

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).