From: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
To: stephen@networkplumber.org, thomas@monjalon.net,
ferruh.yigit@amd.com, andrew.rybchenko@oktetlabs.ru
Cc: dev@dpdk.org, stable@dpdk.org,
Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk>
Subject: [PATCH v6] app/testpmd: monitor state of primary process when using secondary
Date: Wed, 30 Jul 2025 02:08:18 -0400 [thread overview]
Message-ID: <20250730060818.141022-1-14pwcse1224@uetpeshawar.edu.pk> (raw)
In-Reply-To: <20250729063919.3554143-3-14pwcse1224@uetpeshawar.edu.pk>
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 process.
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.43.0
next prev parent reply other threads:[~2025-07-30 6:08 UTC|newest]
Thread overview: 40+ 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-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
2025-07-30 5:24 ` 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 ` Khadem Ullah [this message]
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=20250730060818.141022-1-14pwcse1224@uetpeshawar.edu.pk \
--to=14pwcse1224@uetpeshawar.edu.pk \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=stable@dpdk.org \
--cc=stephen@networkplumber.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 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).