patch 'ipc: trigger async callback without peers' has been queued to stable release 25.11.3

Kevin Traynor ktraynor at redhat.com
Tue Jul 28 17:56:49 CEST 2026


Hi,

FYI, your patch has been queued to stable release 25.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 08/01/26. 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

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

Thanks.

Kevin

---
>From 093035e5f15aa55b368fe88a4a18172461af4af4 Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov at intel.com>
Date: Fri, 26 Jun 2026 11:34:01 +0100
Subject: [PATCH] ipc: trigger async callback without peers

[ upstream commit 894bc93b6b464218d051f779ef0f4336ec812f09 ]

Currently, when rte_mp_request_async() is called and no peer processes
are connected (nb_sent == 0), the user callback is never invoked.

The original implementation used a dedicated background thread and
pthread_cond_signal() to wake it after queuing the dummy request. When
that thread was replaced with per-message alarms, no alarm was set for
the dummy request, silently breaking the nb_sent == 0 path.

This was not noticed because async requests are usually used while handling
secondary process requests, where peers are typically already present.

Fix it by setting a 1us alarm on the dummy request, so the callback path
immediately triggers and processes it.

Fixes: daf9bfca717e ("ipc: remove thread for async requests")

Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
---
 lib/eal/common/eal_common_proc.c | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/lib/eal/common/eal_common_proc.c b/lib/eal/common/eal_common_proc.c
index 3575f35889..14f818da78 100644
--- a/lib/eal/common/eal_common_proc.c
+++ b/lib/eal/common/eal_common_proc.c
@@ -1180,9 +1180,19 @@ rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 		ret = mp_request_async(eal_mp_socket_path(), copy, param, ts);
 
-		/* if we didn't send anything, put dummy request on the queue */
+		/* if we didn't send anything, put dummy request on the queue
+		 * and set a minimum-delay alarm so the callback fires immediately.
+		 */
 		if (ret == 0 && reply->nb_sent == 0) {
-			TAILQ_INSERT_TAIL(&pending_requests.requests, dummy,
-					next);
+			TAILQ_INSERT_TAIL(&pending_requests.requests, dummy, next);
 			dummy_used = true;
+			if (rte_eal_alarm_set(1, async_reply_handle,
+					(void *)(uintptr_t)dummy->id) < 0) {
+				EAL_LOG(ERR, "Fail to set alarm for dummy request");
+				/* roll back the changes */
+				TAILQ_REMOVE(&pending_requests.requests, dummy, next);
+				dummy_used = false;
+				ret = -1;
+				goto unlock_fail;
+			}
 		}
 
@@ -1248,8 +1258,20 @@ rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 	}
 
-	/* if we didn't send anything, put dummy request on the queue */
+	/* if we didn't send anything, put dummy request on the queue
+	 * and set a minimum-delay alarm so the callback fires immediately.
+	 */
 	if (ret == 0 && reply->nb_sent == 0) {
 		TAILQ_INSERT_HEAD(&pending_requests.requests, dummy, next);
 		dummy_used = true;
+
+		if (rte_eal_alarm_set(1, async_reply_handle,
+				(void *)(uintptr_t)dummy->id) < 0) {
+			EAL_LOG(ERR, "Fail to set alarm for dummy request");
+			/* roll back the changes */
+			TAILQ_REMOVE(&pending_requests.requests, dummy, next);
+			dummy_used = false;
+			ret = -1;
+			goto closedir_fail;
+		}
 	}
 
-- 
2.55.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2026-07-28 16:54:53.096257817 +0100
+++ 0079-ipc-trigger-async-callback-without-peers.patch	2026-07-28 16:54:50.835247644 +0100
@@ -1 +1 @@
-From 894bc93b6b464218d051f779ef0f4336ec812f09 Mon Sep 17 00:00:00 2001
+From 093035e5f15aa55b368fe88a4a18172461af4af4 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 894bc93b6b464218d051f779ef0f4336ec812f09 ]
+
@@ -21 +22,0 @@
-Cc: stable at dpdk.org
@@ -29 +30 @@
-index 63cfacc8d5..5133eaaa47 100644
+index 3575f35889..14f818da78 100644
@@ -32 +33 @@
-@@ -1200,9 +1200,19 @@ rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
+@@ -1180,9 +1180,19 @@ rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
@@ -55 +56 @@
-@@ -1269,8 +1279,20 @@ rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
+@@ -1248,8 +1258,20 @@ rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,



More information about the stable mailing list