[dpdk-stable] patch 'timer: add limitation note for sync stop and reset' has been queued to LTS release 18.11.11

Kevin Traynor ktraynor at redhat.com
Thu Nov 5 13:39:55 CET 2020


Hi,

FYI, your patch has been queued to LTS release 18.11.11

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/10/20. 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/71605786253853b3363e181c780e35a3744e0f5d

Thanks.

Kevin.

---
>From 71605786253853b3363e181c780e35a3744e0f5d Mon Sep 17 00:00:00 2001
From: Erik Gabriel Carrillo <erik.g.carrillo at intel.com>
Date: Wed, 9 Sep 2020 09:41:14 -0500
Subject: [PATCH] timer: add limitation note for sync stop and reset

[ upstream commit 0875ec4dd55a548a1f8a27674b1c136c0800d73d ]

If a timer's callback function calls rte_timer_reset_sync() or
rte_timer_stop_sync() on another timer that is in the RUNNING state and
owned by the current lcore, the *_sync() calls will loop indefinitely.

Relatedly, if a timer's callback function calls *_sync() on another
timer that is in the RUNNING state and is owned by a different lcore,
but a timer callback function runs on that different lcore and calls
*_sync() on a timer that is in the RUNNING state and owned by the
current lcore, the two lcores will loop indefinitely.

Add a note in the rte_timer_stop_sync and rte_timer_reset_sync
documentation that indicates that these APIs should not be used inside
timer callback functions in order to avoid the hangs described above,
and suggests an alternative.

Bugzilla ID: 491

Signed-off-by: Erik Gabriel Carrillo <erik.g.carrillo at intel.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli at arm.com>
---
 lib/librte_timer/rte_timer.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/lib/librte_timer/rte_timer.h b/lib/librte_timer/rte_timer.h
index 9b95cd2c98..d3b06bc8e8 100644
--- a/lib/librte_timer/rte_timer.h
+++ b/lib/librte_timer/rte_timer.h
@@ -224,4 +224,10 @@ int rte_timer_reset(struct rte_timer *tim, uint64_t ticks,
  * @param arg
  *   The user argument of the callback function.
+ *
+ * @note
+ *   This API should not be called inside a timer's callback function to
+ *   reset another timer; doing so could hang in certain scenarios. Instead,
+ *   the rte_timer_reset() API can be called directly and its return code
+ *   can be checked for success or failure.
  */
 void
@@ -264,4 +270,10 @@ int rte_timer_stop(struct rte_timer *tim);
  * @param tim
  *   The timer handle.
+ *
+ * @note
+ *   This API should not be called inside a timer's callback function to
+ *   stop another timer; doing so could hang in certain scenarios. Instead, the
+ *   rte_timer_stop() API can be called directly and its return code can
+ *   be checked for success or failure.
  */
 void rte_timer_stop_sync(struct rte_timer *tim);
-- 
2.26.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-11-05 12:38:55.157265677 +0000
+++ 0048-timer-add-limitation-note-for-sync-stop-and-reset.patch	2020-11-05 12:38:54.246896024 +0000
@@ -1 +1 @@
-From 0875ec4dd55a548a1f8a27674b1c136c0800d73d Mon Sep 17 00:00:00 2001
+From 71605786253853b3363e181c780e35a3744e0f5d Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 0875ec4dd55a548a1f8a27674b1c136c0800d73d ]
+
@@ -22 +23,0 @@
-Cc: stable at dpdk.org
@@ -31 +32 @@
-index 7af83783b0..22a27aa08d 100644
+index 9b95cd2c98..d3b06bc8e8 100644
@@ -34 +35 @@
-@@ -263,4 +263,10 @@ int rte_timer_reset(struct rte_timer *tim, uint64_t ticks,
+@@ -224,4 +224,10 @@ int rte_timer_reset(struct rte_timer *tim, uint64_t ticks,
@@ -45 +46 @@
-@@ -302,4 +308,10 @@ int rte_timer_stop(struct rte_timer *tim);
+@@ -264,4 +270,10 @@ int rte_timer_stop(struct rte_timer *tim);



More information about the stable mailing list