This patch fixed the reset function to avoid crash when user don't call port stop, port reset functions as sequence.
Fixes: 97f1e19679 ("app/testpmd: add port reset command") Cc: sta...@dpdk.org Signed-off-by: Wang ShougangX <shougangx.w...@intel.com> --- app/test-pmd/cmdline.c | 3 +++ app/test-pmd/testpmd.c | 6 ++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 9 +++++++++ 3 files changed, 18 insertions(+) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 56783aa13..9d0c3db5e 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -758,6 +758,9 @@ static void cmd_help_long_parsed(void *parsed_result, "port close (port_id|all)\n" " Close all ports or port_id.\n\n" + "port reset (port_id|all)\n" + " Reset all ports or port_id.\n\n" + "port attach (ident)\n" " Attach physical or virtual dev by pci address or virtual device name\n\n" diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index e8e2a39b6..9b7a1521a 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2344,6 +2344,12 @@ reset_port(portid_t pid) if (port_id_is_invalid(pid, ENABLED_WARN)) return; + if ((pid == (portid_t)RTE_PORT_ALL && !all_ports_stopped()) || + (pid != (portid_t)RTE_PORT_ALL && !port_is_stopped(pid))) { + printf("Can not reset port(s), please stop port(s) first.\n"); + return; + } + printf("Resetting ports...\n"); RTE_ETH_FOREACH_DEV(pi) { diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 313e0707e..b1a14cc4e 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -2041,6 +2041,15 @@ Close all ports or a specific port:: testpmd> port close (port_id|all) +port reset +~~~~~~~~~~ + +Reset all ports or a specific port:: + + testpmd> port reset (port_id|all) + +User should stop port(s) before resetting and (re-)start after reset. + port config - queue ring size ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- 2.17.1