[PATCH v7] app/testpmd: monitor state of primary process when using secondary
Varghese, Vipin
Vipin.Varghese at amd.com
Fri Aug 8 05:23:37 CEST 2025
[AMD Official Use Only - AMD Internal Distribution Only]
Hi Khadem,
Thank you for sharing but few thoughts here
> -----Original Message-----
> From: Khadem Ullah <14pwcse1224 at uetpeshawar.edu.pk>
> Sent: Monday, August 4, 2025 5:03 PM
> To: stephen at networkplumber.org; thomas at monjalon.net; Yigit, Ferruh
> <Ferruh.Yigit at amd.com>; andrew.rybchenko at oktetlabs.ru
> Cc: dev at dpdk.org; stable at dpdk.org; Khadem Ullah
> <14pwcse1224 at uetpeshawar.edu.pk>
> Subject: [PATCH v7] app/testpmd: monitor state of primary process when using
> secondary
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> 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 at dpdk.org
>
> Signed-off-by: Khadem Ullah <14pwcse1224 at uetpeshawar.edu.pk>
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
> app/test-pmd/testpmd.c | 47
> +++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 46 insertions(+), 1 deletion(-)
>
> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index
> bb88555328..b7affa6da9 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,38 @@ signal_handler(int signum __rte_unused)
> prompt_exit();
> }
>
> +#ifndef RTE_EXEC_ENV_WINDOWS
> +/* 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);
Indeed, the idea for monitoring and finding if primary is still alive.
When we exit, should not we need graceful exit? If yes, we can not simply use `exit`, but need to use `eal_cleanup`.
Hence I request for rework with cleanup.
NACK: Vipin Varghese <Vipin.Varghese at amd.com>
> + }
> +}
> +
> +/* 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); } #endif
> +
> int
> main(int argc, char** argv)
> {
> @@ -4363,6 +4397,12 @@ main(int argc, char** argv)
> rte_exit(EXIT_FAILURE, "Cannot init EAL: %s\n",
> rte_strerror(rte_errno));
>
> +#ifndef RTE_EXEC_ENV_WINDOWS
> + if (rte_eal_process_type() == RTE_PROC_SECONDARY &&
> + enable_primary_monitor() < 0)
> + rte_exit(EXIT_FAILURE, "Cannot setup primary monitor");
> +#endif
> +
> /* allocate port structures, and init them */
> init_port();
>
> @@ -4556,6 +4596,11 @@ main(int argc, char** argv)
> }
> }
>
> +#ifndef RTE_EXEC_ENV_WINDOWS
> + if (rte_eal_process_type() == RTE_PROC_SECONDARY)
> + disable_primary_monitor(); #endif
> +
> pmd_test_exit();
>
> #ifdef RTE_LIB_PDUMP
> --
> 2.43.0
More information about the stable
mailing list