Message ID | 20201009131331.5897-3-nipun.gupta@nxp.com |
---|---|
State | New |
Headers | show |
Series | [1/3,v3] ethdev: add rx offload to drop error packets | expand |
Regards, Asaf Penso >-----Original Message----- >From: nipun.gupta@nxp.com <nipun.gupta@nxp.com> >Sent: Friday, October 9, 2020 4:14 PM >To: dev@dpdk.org >Cc: NBU-Contact-Thomas Monjalon <thomas@monjalon.net>; >ferruh.yigit@intel.com; arybchenko@solarflare.com; >hemant.agrawal@nxp.com; sachin.saxena@nxp.com; rohit.raj@nxp.com; >jerinjacobk@gmail.com; stephen@networkplumber.org; Asaf Penso ><asafp@nvidia.com>; Nipun Gupta <nipun.gupta@nxp.com> >Subject: [PATCH 3/3 v3] app/testpmd: support hardware offload to drop error >packets > >From: Nipun Gupta <nipun.gupta@nxp.com> > >With DEV_RX_OFFLOAD_ERR_PKT_DROP now defined as an offload >capability, and separate DEV_RX_ERR_PKT_DROP_OFFLOAD_ALL capability to >drop all error packets in hardware, testpmd showcases this with a new added >configuration option 'enable-hw-drop-err-all'. > >Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com> Reviewed-By: Asaf Penso <asafp@nvidia.com> >--- > app/test-pmd/parameters.c | 7 +++++++ > app/test-pmd/testpmd.c | 8 ++++++++ > app/test-pmd/testpmd.h | 1 + > doc/guides/testpmd_app_ug/run_app.rst | 4 ++++ > 4 files changed, 20 insertions(+) > >diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index >1ead59579..508612426 100644 >--- a/app/test-pmd/parameters.c >+++ b/app/test-pmd/parameters.c >@@ -142,6 +142,7 @@ usage(char* progname) > printf(" --enable-hw-vlan-strip: enable hardware vlan strip.\n"); > printf(" --enable-hw-vlan-extend: enable hardware vlan extend.\n"); > printf(" --enable-hw-qinq-strip: enable hardware qinq strip.\n"); >+ printf(" --enable-hw-drop-err-all: enable hardware packet drop for >+all error packets.\n"); > printf(" --enable-drop-en: enable per queue packet drop.\n"); > printf(" --disable-rss: disable rss.\n"); > printf(" --port-topology=<paired|chained|loop>: set port topology >(paired " >@@ -631,6 +632,7 @@ launch_args_parse(int argc, char** argv) > { "enable-hw-vlan-strip", 0, 0, 0 }, > { "enable-hw-vlan-extend", 0, 0, 0 }, > { "enable-hw-qinq-strip", 0, 0, 0 }, >+ { "enable-hw-drop-err-all", 0, 0, 0 }, > { "enable-drop-en", 0, 0, 0 }, > { "disable-rss", 0, 0, 0 }, > { "port-topology", 1, 0, 0 }, >@@ -1283,6 +1285,11 @@ launch_args_parse(int argc, char** argv) > rmv_interrupt = 0; > if (!strcmp(lgopts[opt_idx].name, "flow-isolate-all")) > flow_isolate_all = 1; >+ if (!strcmp(lgopts[opt_idx].name, >+ "enable-hw-drop-err-all")) { >+ rx_err_pkt_drop_all = 1; >+ } >+ > if (!strcmp(lgopts[opt_idx].name, "tx-offloads")) { > char *end = NULL; > n = strtoull(optarg, &end, 16); >diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index >ccba71c07..c9e7397e6 100644 >--- a/app/test-pmd/testpmd.c >+++ b/app/test-pmd/testpmd.c >@@ -359,6 +359,11 @@ uint8_t lsc_interrupt = 1; /* enabled by default */ > */ > uint8_t rmv_interrupt = 1; /* enabled by default */ > >+/* >+ * Drop all RX error packets on HW itself. >+ */ >+uint8_t rx_err_pkt_drop_all = 0; /* disabled by default */ >+ > uint8_t hot_plug = 0; /**< hotplug disabled by default. */ > > /* After attach, port setup is called on event or by iterator */ @@ -3359,6 >+3364,9 @@ init_port_config(void) > (rte_eth_devices[pid].data->dev_flags & > RTE_ETH_DEV_INTR_RMV)) > port->dev_conf.intr_conf.rmv = 1; >+ >+ if (rx_err_pkt_drop_all) >+ port->dev_conf.err_pkt_drop_conf.all = 1; > } > } > >diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index >c7e7e41a9..eab154ed4 100644 >--- a/app/test-pmd/testpmd.h >+++ b/app/test-pmd/testpmd.h >@@ -314,6 +314,7 @@ extern uint8_t no_device_start; /**<set by "--disable- >device-start" 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 uint8_t rx_err_pkt_drop_all; /**< enabled by >+"--enable-hw-drop-err-all" parameter */ > extern uint32_t event_print_mask; > /**< set by "--print-event xxxx" and "--mask-event xxxx parameters */ >extern bool setup_on_probe_event; /**< disabled by port setup-on iterator >*/ diff --git a/doc/guides/testpmd_app_ug/run_app.rst >b/doc/guides/testpmd_app_ug/run_app.rst >index e2539f693..20f2f8083 100644 >--- a/doc/guides/testpmd_app_ug/run_app.rst >+++ b/doc/guides/testpmd_app_ug/run_app.rst >@@ -213,6 +213,10 @@ The command line options are: > > Enable hardware QINQ strip. > >+* ``--enable-hw-drop-err-all`` >+ >+ Enable hardware packet drop for any error packets >+ > * ``--enable-drop-en`` > > Enable per-queue packet drop for packets with no descriptors. >-- >2.17.1
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 1ead59579..508612426 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -142,6 +142,7 @@ usage(char* progname) printf(" --enable-hw-vlan-strip: enable hardware vlan strip.\n"); printf(" --enable-hw-vlan-extend: enable hardware vlan extend.\n"); printf(" --enable-hw-qinq-strip: enable hardware qinq strip.\n"); + printf(" --enable-hw-drop-err-all: enable hardware packet drop for all error packets.\n"); printf(" --enable-drop-en: enable per queue packet drop.\n"); printf(" --disable-rss: disable rss.\n"); printf(" --port-topology=<paired|chained|loop>: set port topology (paired " @@ -631,6 +632,7 @@ launch_args_parse(int argc, char** argv) { "enable-hw-vlan-strip", 0, 0, 0 }, { "enable-hw-vlan-extend", 0, 0, 0 }, { "enable-hw-qinq-strip", 0, 0, 0 }, + { "enable-hw-drop-err-all", 0, 0, 0 }, { "enable-drop-en", 0, 0, 0 }, { "disable-rss", 0, 0, 0 }, { "port-topology", 1, 0, 0 }, @@ -1283,6 +1285,11 @@ launch_args_parse(int argc, char** argv) rmv_interrupt = 0; if (!strcmp(lgopts[opt_idx].name, "flow-isolate-all")) flow_isolate_all = 1; + if (!strcmp(lgopts[opt_idx].name, + "enable-hw-drop-err-all")) { + rx_err_pkt_drop_all = 1; + } + if (!strcmp(lgopts[opt_idx].name, "tx-offloads")) { char *end = NULL; n = strtoull(optarg, &end, 16); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index ccba71c07..c9e7397e6 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -359,6 +359,11 @@ uint8_t lsc_interrupt = 1; /* enabled by default */ */ uint8_t rmv_interrupt = 1; /* enabled by default */ +/* + * Drop all RX error packets on HW itself. + */ +uint8_t rx_err_pkt_drop_all = 0; /* disabled by default */ + uint8_t hot_plug = 0; /**< hotplug disabled by default. */ /* After attach, port setup is called on event or by iterator */ @@ -3359,6 +3364,9 @@ init_port_config(void) (rte_eth_devices[pid].data->dev_flags & RTE_ETH_DEV_INTR_RMV)) port->dev_conf.intr_conf.rmv = 1; + + if (rx_err_pkt_drop_all) + port->dev_conf.err_pkt_drop_conf.all = 1; } } diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index c7e7e41a9..eab154ed4 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -314,6 +314,7 @@ extern uint8_t no_device_start; /**<set by "--disable-device-start" 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 uint8_t rx_err_pkt_drop_all; /**< enabled by "--enable-hw-drop-err-all" parameter */ extern uint32_t event_print_mask; /**< set by "--print-event xxxx" and "--mask-event xxxx parameters */ extern bool setup_on_probe_event; /**< disabled by port setup-on iterator */ diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst index e2539f693..20f2f8083 100644 --- a/doc/guides/testpmd_app_ug/run_app.rst +++ b/doc/guides/testpmd_app_ug/run_app.rst @@ -213,6 +213,10 @@ The command line options are: Enable hardware QINQ strip. +* ``--enable-hw-drop-err-all`` + + Enable hardware packet drop for any error packets + * ``--enable-drop-en`` Enable per-queue packet drop for packets with no descriptors.