[dpdk-dev] [PATCH v2] app/testpmd: configure event display

Gaetan Rivet gaetan.rivet at 6wind.com
Tue May 2 09:03:18 CEST 2017


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.lu at intel.com>

Signed-off-by: Gaetan Rivet <gaetan.rivet at 6wind.com>
---
Additionally, I'm thinking about runtime commands for events, in the form

event show <name|all>
event print <name|all>
event mask <name|all>

where show could display the state of the masking for this event as well
as statistics for the event. print and mask 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
---
 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..f51a27e 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



More information about the dev mailing list