[dpdk-stable] patch 'distributor: fix livelock on flush' has been queued to LTS release 18.11.3

Kevin Traynor ktraynor at redhat.com
Thu Sep 5 12:17:17 CEST 2019


Hi,

FYI, your patch has been queued to LTS release 18.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/12/19. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/cba708424348b49e50b284da3c6b9a8cce1b6d21

Thanks.

Kevin Traynor

---
>From cba708424348b49e50b284da3c6b9a8cce1b6d21 Mon Sep 17 00:00:00 2001
From: Liang Ma <liang.j.ma at intel.com>
Date: Thu, 25 Jul 2019 10:03:01 +0100
Subject: [PATCH] distributor: fix livelock on flush

[ upstream commit 96c343868dd15ebdc74371a9dea2288b30ce13ea ]

The Distributor autotest can lock if ran enough times. Worker and
distributor threads get into a livelock situation waiting on each
other.

To repeat:
`while sudo sh -c "echo 'distributor_autotest' |
		./build/app/test/dpdk-test"; do :; done`

The root cause is where we are flushing on exit, and do not wait for
all worker packets to be returned before exiting.
Add a delay on flush so that all worker packets are returned before
completing the flush.

Bugzilla ID: 316
Fixes: 775003ad2f96 ("distributor: add new burst-capable library")

Reported-by: Michael Santana <msantana at redhat.com>
Signed-off-by: David Hunt <david.hunt at intel.com>
Signed-off-by: Liang Ma <liang.j.ma at intel.com>
Tested-by: Michael Santana <msantana at redhat.com>
---
 lib/librte_distributor/rte_distributor.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/librte_distributor/rte_distributor.c b/lib/librte_distributor/rte_distributor.c
index 043b8f3ae..b60acdeed 100644
--- a/lib/librte_distributor/rte_distributor.c
+++ b/lib/librte_distributor/rte_distributor.c
@@ -542,4 +542,7 @@ rte_distributor_flush_v1705(struct rte_distributor *d)
 		rte_distributor_process(d, NULL, 0);
 
+	/* wait 10ms to allow all worker drain the pkts */
+	rte_delay_us(10000);
+
 	/*
 	 * Send empty burst to all workers to allow them to exit
-- 
2.20.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-09-05 10:36:48.549605211 +0100
+++ 0017-distributor-fix-livelock-on-flush.patch	2019-09-05 10:36:47.494700905 +0100
@@ -1 +1 @@
-From 96c343868dd15ebdc74371a9dea2288b30ce13ea Mon Sep 17 00:00:00 2001
+From cba708424348b49e50b284da3c6b9a8cce1b6d21 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 96c343868dd15ebdc74371a9dea2288b30ce13ea ]
+
@@ -21 +22,0 @@
-Cc: stable at dpdk.org
@@ -32 +33 @@
-index 9fa05f69a..21eb1fb0a 100644
+index 043b8f3ae..b60acdeed 100644
@@ -35 +36 @@
-@@ -543,4 +543,7 @@ rte_distributor_flush_v1705(struct rte_distributor *d)
+@@ -542,4 +542,7 @@ rte_distributor_flush_v1705(struct rte_distributor *d)


More information about the stable mailing list