app/testpmd: fix crash on port reset
authorShougang Wang <shougangx.wang@intel.com>
Tue, 24 Sep 2019 04:49:03 +0000 (04:49 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 7 Oct 2019 13:00:56 +0000 (15:00 +0200)
port reset cause crash when ports are not stopped. Fixed by refusing the
reset when port is not stopped.

Fixes: 97f1e196799f ("app/testpmd: add port reset command")
Cc: stable@dpdk.org
Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
app/test-pmd/cmdline.c
app/test-pmd/testpmd.c
doc/guides/testpmd_app_ug/testpmd_funcs.rst

index dd4e6e6..def471d 100644 (file)
@@ -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"
 
index 1e3dc44..5701f31 100644 (file)
@@ -2361,6 +2361,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) {
index 67f4339..cba5ba1 100644 (file)
@@ -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
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~