From: Stephen Hemminger <stephen@networkplumber.org>
To: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Cc: thomas@monjalon.net, ferruh.yigit@amd.com,
andrew.rybchenko@oktetlabs.ru, dev@dpdk.org, stable@dpdk.org
Subject: Re: [PATCH] [PATCH v5] app/testpmd: fix segfault in secondary process by monitoring primary
Date: Tue, 29 Jul 2025 14:48:50 -0700 [thread overview]
Message-ID: <20250729144850.2392840f@hermes.local> (raw)
In-Reply-To: <20250729063919.3554143-3-14pwcse1224@uetpeshawar.edu.pk>
What about this simpler and more direct approach.
From d3a85e214e8ba9a89e2b154480a8fc76a67c0f68 Mon Sep 17 00:00:00 2001
From: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Date: Tue, 29 Jul 2025 08:59:15 -0700
Subject: [PATCH] app/testpmd: monitor state of primary process when using
secondary
In secondary processes, accessing device after primary has exited
will cause crash.
This patch adds a mechanism in testpmd to monitor the primary process
from the secondary using `rte_eal_primary_proc_alive()`.
When primary process exits it forces secondary to exit avoiding
issues from cleanup logic.
Fixes: a550baf24af9 ("app/testpmd: support multi-process")
Cc: stable@dpdk.org
Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-pmd/testpmd.c | 41 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index bb88555328..7c22046efb 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -101,13 +101,15 @@
uint16_t verbose_level = 0; /**< Silent by default. */
int testpmd_logtype; /**< Log type for testpmd logs */
+/* Maximum delay for exiting after primary process. */
+#define MONITOR_INTERVAL (500 * 1000)
+
/* use main core for command line ? */
uint8_t interactive = 0;
uint8_t auto_start = 0;
uint8_t tx_first;
char cmdline_filename[PATH_MAX] = {0};
bool echo_cmdline_file;
-
/*
* NUMA support configuration.
* When set, the NUMA support attempts to dispatch the allocation of the
@@ -4332,6 +4334,36 @@ signal_handler(int signum __rte_unused)
prompt_exit();
}
+/* Alarm signal handler, used to check that primary process */
+static void
+monitor_primary(void *arg __rte_unused)
+{
+ if (rte_eal_primary_proc_alive(NULL)) {
+ rte_eal_alarm_set(MONITOR_INTERVAL, monitor_primary, NULL);
+ } else {
+ /*
+ * If primary process exits, then all the device information
+ * is no longer valid. Calling any cleanup code is going to
+ * run into use after free.
+ */
+ fprintf(stderr, "\nPrimary process is no longer active, exiting...\n");
+ exit(EXIT_FAILURE);
+ }
+}
+
+/* Setup handler to check when primary exits. */
+static int
+enable_primary_monitor(void)
+{
+ return rte_eal_alarm_set(MONITOR_INTERVAL, monitor_primary, NULL);
+}
+
+static void
+disable_primary_monitor(void)
+{
+ rte_eal_alarm_cancel(monitor_primary, NULL);
+}
+
int
main(int argc, char** argv)
{
@@ -4363,6 +4395,10 @@ main(int argc, char** argv)
rte_exit(EXIT_FAILURE, "Cannot init EAL: %s\n",
rte_strerror(rte_errno));
+ if (rte_eal_process_type() == RTE_PROC_SECONDARY &&
+ enable_primary_monitor() < 0)
+ rte_exit(EXIT_FAILURE, "Cannot setup primary monitor");
+
/* allocate port structures, and init them */
init_port();
@@ -4556,6 +4592,9 @@ main(int argc, char** argv)
}
}
+ if (rte_eal_process_type() == RTE_PROC_SECONDARY)
+ disable_primary_monitor();
+
pmd_test_exit();
#ifdef RTE_LIB_PDUMP
--
2.47.2
next prev parent reply other threads:[~2025-07-29 21:48 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-22 11:54 [PATCH] lib/ethdev: fix segfault in secondary process by validating dev_private pointer Khadem Ullah
2025-07-22 13:39 ` Stephen Hemminger
2025-07-22 14:30 ` Khadem Ullah
2025-07-22 15:42 ` Stephen Hemminger
2025-07-22 16:01 ` Khadem Ullah
2025-07-22 16:13 ` Bruce Richardson
2025-07-22 17:04 ` Khadem Ullah
2025-07-22 17:38 ` Stephen Hemminger
2025-07-22 17:53 ` Khadem Ullah
2025-07-22 18:21 ` Stephen Hemminger
2025-07-22 19:03 ` Khadem Ullah
2025-07-22 19:05 ` Ivan Malov
2025-07-22 22:28 ` Stephen Hemminger
2025-07-23 4:29 ` Khadem Ullah
2025-07-23 4:50 ` [PATCH v2] " Khadem Ullah
2025-07-23 12:19 ` Khadem Ullah
2025-07-23 13:13 ` Khadem Ullah
2025-07-23 13:24 ` Ivan Malov
2025-07-23 13:26 ` Khadem Ullah
2025-07-23 13:31 ` Ivan Malov
2025-07-23 13:10 ` [PATCH] [PATCH v3] " Khadem Ullah
2025-07-23 13:19 ` Ivan Malov
2025-07-23 13:34 ` Khadem Ullah
2025-07-23 14:22 ` Stephen Hemminger
2025-07-24 5:49 ` Khadem Ullah
2025-07-25 13:00 ` Khadem Ullah
2025-07-25 12:55 ` [PATCH] [PATCH v4] " Khadem Ullah
2025-07-28 21:45 ` Stephen Hemminger
2025-07-29 5:42 ` Khadem Ullah
2025-07-29 21:34 ` Stephen Hemminger
2025-07-30 5:07 ` Khadem Ullah
2025-08-08 3:49 ` Varghese, Vipin
2025-08-08 15:32 ` Stephen Hemminger
2025-08-11 10:19 ` Varghese, Vipin
2025-08-11 10:28 ` Khadem Ullah
2025-08-11 10:39 ` Varghese, Vipin
2025-07-29 6:39 ` [PATCH] app/testpmd: fix segfault in secondary process by monitoring primary Khadem Ullah
2025-07-29 6:39 ` [PATCH] [PATCH v4] lib/ethdev: fix segfault in secondary process by validating dev_private pointer Khadem Ullah
2025-07-29 6:39 ` [PATCH] [PATCH v5] app/testpmd: fix segfault in secondary process by monitoring primary Khadem Ullah
2025-07-29 14:48 ` Stephen Hemminger
2025-07-29 21:48 ` Stephen Hemminger [this message]
2025-07-30 5:24 ` Khadem Ullah
2025-08-08 3:44 ` Varghese, Vipin
2025-08-08 16:17 ` Stephen Hemminger
2025-08-11 10:23 ` Varghese, Vipin
2025-08-11 10:27 ` Khadem Ullah
2025-07-30 5:56 ` [PATCH] app/testpmd: monitor state of primary process when using secondary Khadem Ullah
2025-07-30 6:08 ` [PATCH v6] " Khadem Ullah
2025-08-01 22:50 ` Stephen Hemminger
2025-08-04 7:54 ` [PATCH v7] " Khadem Ullah
2025-08-04 11:33 ` Khadem Ullah
2025-08-04 15:44 ` Stephen Hemminger
2025-08-05 0:50 ` fengchengwen
2025-08-08 3:23 ` Varghese, Vipin
2025-08-08 5:44 ` Khadem Ullah
2025-08-08 10:59 ` Varghese, Vipin
2025-08-08 11:49 ` Khadem Ullah
2025-08-08 16:49 ` Stephen Hemminger
2025-08-08 17:01 ` Khadem Ullah
2025-08-11 10:37 ` Varghese, Vipin
2025-08-11 11:14 ` Khadem Ullah
2025-08-11 11:34 ` Varghese, Vipin
2025-08-11 11:55 ` Khadem Ullah
2025-08-11 14:44 ` Varghese, Vipin
2025-08-11 17:11 ` Khadem Ullah
2025-08-11 10:30 ` Varghese, Vipin
2025-08-11 10:51 ` Khadem Ullah
2025-08-11 11:07 ` Varghese, Vipin
2025-08-08 15:28 ` Stephen Hemminger
2025-08-08 15:50 ` Khadem Ullah
2025-08-08 16:10 ` Stephen Hemminger
2025-09-15 8:10 ` [PATCH v3] app/testpmd: stop secondary process fwd_lcores during primary teardown Khadem Ullah
2025-09-15 9:29 ` Khadem Ullah
2025-09-15 10:23 ` Khadem Ullah
2025-09-15 11:25 ` Khadem Ullah
2025-09-15 15:43 ` Stephen Hemminger
2025-09-17 11:36 ` [PATCH v4] " Khadem Ullah
2025-09-17 20:54 ` Stephen Hemminger
2025-09-18 6:47 ` [PATCH v5] " Khadem Ullah
2025-09-18 15:08 ` Stephen Hemminger
2025-09-18 16:45 ` Stephen Hemminger
2025-07-23 14:21 ` [PATCH v2] lib/ethdev: fix segfault in secondary process by validating dev_private pointer Stephen Hemminger
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=20250729144850.2392840f@hermes.local \
--to=stephen@networkplumber.org \
--cc=14pwcse1224@uetpeshawar.edu.pk \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=stable@dpdk.org \
--cc=thomas@monjalon.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.