Add two parameters to testpmd: --print-event <event name> --mask-event <event name>
To enable or disable to printing of events. This display is configured on a per-event basis. By default, all except VF_MBOX are displayed. Fixes: 76ad4a2d82d4 ("app/testpmd: add generic event handler") Cc: "Lu, Wenzhuo" <wenzhuo...@intel.com> Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com> --- Additionally, I'm thinking about runtime commands for events, in the form event <name|all> show event <name|all> print <bool> where show could display the state of the display for this event as well as statistics for the event. print on|off would do the same as the two parameters introduced by this patch. But this is a little heavier and I wanted to propose this fix as soon as possible. v1 -> v2: * Rebased on top of master * Fixed typos in doc v2 -> v3: * Fixed doc alignment issues. --- app/test-pmd/parameters.c | 46 +++++++++++++++++++++++++++++++++++ app/test-pmd/testpmd.c | 13 +++++++++- app/test-pmd/testpmd.h | 2 ++ doc/guides/testpmd_app_ug/run_app.rst | 8 ++++++ 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 787e143..5a07dea 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -206,6 +206,10 @@ usage(char* progname) printf(" --no-rmv-interrupt: disable device removal interrupt.\n"); printf(" --bitrate-stats=N: set the logical core N to perform " "bit-rate calculation.\n"); + printf(" --print-event <unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv>: " + "enable print of designated event"); + printf(" --mask-event <unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv>: " + "disable print of designated event"); } #ifdef RTE_LIBRTE_CMDLINE @@ -503,6 +507,36 @@ parse_ringnuma_config(const char *q_arg) return 0; } +static int +parse_event_printing_config(const char *optarg, int enable) +{ + uint32_t mask = 0; + + if (!strcmp(optarg, "unknown")) + mask = UINT32_C(1) << RTE_ETH_EVENT_UNKNOWN; + else if (!strcmp(optarg, "intr_lsc")) + mask = UINT32_C(1) << RTE_ETH_EVENT_INTR_LSC; + else if (!strcmp(optarg, "queue_state")) + mask = UINT32_C(1) << RTE_ETH_EVENT_QUEUE_STATE; + else if (!strcmp(optarg, "intr_reset")) + mask = UINT32_C(1) << RTE_ETH_EVENT_INTR_RESET; + else if (!strcmp(optarg, "vf_mbox")) + mask = UINT32_C(1) << RTE_ETH_EVENT_VF_MBOX; + else if (!strcmp(optarg, "macsec")) + mask = UINT32_C(1) << RTE_ETH_EVENT_MACSEC; + else if (!strcmp(optarg, "intr_rmv")) + mask = UINT32_C(1) << RTE_ETH_EVENT_INTR_RMV; + else { + fprintf(stderr, "Invalid event: %s\n", optarg); + return -1; + } + if (enable) + event_print_mask |= mask; + else + event_print_mask &= ~mask; + return 0; +} + void launch_args_parse(int argc, char** argv) { @@ -581,6 +615,8 @@ launch_args_parse(int argc, char** argv) { "disable-link-check", 0, 0, 0 }, { "no-lsc-interrupt", 0, 0, 0 }, { "no-rmv-interrupt", 0, 0, 0 }, + { "print-event", 1, 0, 0 }, + { "mask-event", 1, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1036,6 +1072,16 @@ launch_args_parse(int argc, char** argv) lsc_interrupt = 0; if (!strcmp(lgopts[opt_idx].name, "no-rmv-interrupt")) rmv_interrupt = 0; + if (!strcmp(lgopts[opt_idx].name, "print-event")) + if (parse_event_printing_config(optarg, 1)) { + rte_exit(EXIT_FAILURE, + "invalid print-event argument\n"); + } + if (!strcmp(lgopts[opt_idx].name, "mask-event")) + if (parse_event_printing_config(optarg, 0)) { + rte_exit(EXIT_FAILURE, + "invalid mask-event argument\n"); + } break; case 'h': diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index dfe6442..b9c385e 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -282,6 +282,17 @@ uint8_t lsc_interrupt = 1; /* enabled by default */ uint8_t rmv_interrupt = 1; /* enabled by default */ /* + * Display or mask ether events + * Default to all events except VF_MBOX + */ +uint32_t event_print_mask = (UINT32_C(1) << RTE_ETH_EVENT_UNKNOWN) | + (UINT32_C(1) << RTE_ETH_EVENT_INTR_LSC) | + (UINT32_C(1) << RTE_ETH_EVENT_QUEUE_STATE) | + (UINT32_C(1) << RTE_ETH_EVENT_INTR_RESET) | + (UINT32_C(1) << RTE_ETH_EVENT_MACSEC) | + (UINT32_C(1) << RTE_ETH_EVENT_INTR_RMV); + +/* * NIC bypass mode configuration options. */ #ifdef RTE_NIC_BYPASS @@ -1806,7 +1817,7 @@ eth_event_callback(uint8_t port_id, enum rte_eth_event_type type, void *param) fprintf(stderr, "\nPort %" PRIu8 ": %s called upon invalid event %d\n", port_id, __func__, type); fflush(stderr); - } else { + } else if (event_print_mask & (UINT32_C(1) << type)) { printf("\nPort %" PRIu8 ": %s event\n", port_id, event_desc[type]); fflush(stdout); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 8b3d903..3c6a59a 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -308,6 +308,8 @@ extern uint8_t no_link_check; /**<set by "--disable-link-check" parameter */ extern volatile int test_done; /* stop packet forwarding when set to 1. */ extern uint8_t lsc_interrupt; /**< disabled by "--no-lsc-interrupt" parameter */ extern uint8_t rmv_interrupt; /**< disabled by "--no-rmv-interrupt" parameter */ +extern uint32_t event_print_mask; +/**< set by "--print-event xxxx" and "--mask-event xxxx parameters */ #ifdef RTE_NIC_BYPASS extern uint32_t bypass_timeout; /**< Store the NIC bypass watchdog timeout */ diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst index a117354..3f2a2bd 100644 --- a/doc/guides/testpmd_app_ug/run_app.rst +++ b/doc/guides/testpmd_app_ug/run_app.rst @@ -477,3 +477,11 @@ The commandline options are: * ``--bitrate-stats=N`` Set the logical core N to perform bitrate calculation. + +* ``--print-event <unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv>`` + + Enable printing the occurrence of the designated event. + +* ``--mask-event <unknown|intr_lsc|queue_state|intr_reset|vf_mbox|macsec|intr_rmv>`` + + Disable printing the occurrence of the designated event. -- 2.1.4