When primary app exits, the residual running pdump will stop the primary app to restart. Add an exit_with_primary option to make pdump exit with primary.
Suggested-by: Varghese, Vipin <vipin.vargh...@intel.com> Suggested-by: Burakov, Anatoly <anatoly.bura...@intel.com> Signed-off-by: Suanming.Mou <mousuanm...@huawei.com> --- app/pdump/main.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/pdump/main.c b/app/pdump/main.c index 3d20854..b69ef4e 100644 --- a/app/pdump/main.c +++ b/app/pdump/main.c @@ -26,11 +26,14 @@ #include <rte_ring.h> #include <rte_string_fns.h> #include <rte_pdump.h> +#include <rte_alarm.h> #define CMD_LINE_OPT_PDUMP "pdump" #define CMD_LINE_OPT_PDUMP_NUM 256 #define CMD_LINE_OPT_MULTI "multi" #define CMD_LINE_OPT_MULTI_NUM 257 +#define CMD_LINE_OPT_EXIT_WP "exit_with_primary" +#define CMD_LINE_OPT_EXIT_WP_NUM 258 #define PDUMP_PORT_ARG "port" #define PDUMP_PCI_ARG "device_id" #define PDUMP_QUEUE_ARG "queue" @@ -65,6 +68,7 @@ #define SIZE 256 #define BURST_SIZE 32 #define NUM_VDEVS 2 +#define MONITOR_INTERVEL (500 * 1000) /* true if x is a power of 2 */ #define POWEROF2(x) ((((x)-1) & (x)) == 0) @@ -143,12 +147,14 @@ struct parse_val { static struct rte_eth_conf port_conf_default; static volatile uint8_t quit_signal; static uint8_t multiple_core_capture; +static uint8_t exit_with_primary; /**< display usage */ static void pdump_usage(const char *prgname) { printf("usage: %s [EAL options]" + " --["CMD_LINE_OPT_EXIT_WP"]" " --["CMD_LINE_OPT_MULTI"]\n" " --"CMD_LINE_OPT_PDUMP" " "'(port=<port id> | device_id=<pci id or vdev name>)," @@ -383,6 +389,7 @@ struct parse_val { static struct option long_option[] = { {CMD_LINE_OPT_PDUMP, 1, 0, CMD_LINE_OPT_PDUMP_NUM}, {CMD_LINE_OPT_MULTI, 0, 0, CMD_LINE_OPT_MULTI_NUM}, + {CMD_LINE_OPT_EXIT_WP, 0, 0, CMD_LINE_OPT_EXIT_WP_NUM}, {NULL, 0, 0, 0} }; @@ -403,6 +410,9 @@ struct parse_val { case CMD_LINE_OPT_MULTI_NUM: multiple_core_capture = 1; break; + case CMD_LINE_OPT_EXIT_WP_NUM: + exit_with_primary = 1; + break; default: pdump_usage(prgname); return -1; @@ -864,12 +874,26 @@ struct parse_val { return 0; } +static void monitor_primary(void *arg __rte_unused) +{ + if (quit_signal) + return; + + if (rte_eal_primary_proc_alive(NULL)) + rte_eal_alarm_set(MONITOR_INTERVEL, monitor_primary, NULL); + else + quit_signal = 1; +} + static inline void dump_packets(void) { int i; uint32_t lcore_id = 0; + if (exit_with_primary) + rte_eal_alarm_set(MONITOR_INTERVEL, monitor_primary, NULL); + if (!multiple_core_capture) { printf(" core (%u), capture for (%d) tuples\n", rte_lcore_id(), num_tuples); -- 1.8.3.4