sync patches from 22.07 for hns3, dma and testpmd etc. Signed-off-by: Dongdong Liu <liudongdong3@huawei.com> (cherry picked from commit 7beb6a72fff2920a2d993030b0b02822249707fb)
123 lines
3.6 KiB
Diff
123 lines
3.6 KiB
Diff
From f53f8218cfe85b78779cee5d499e7b32f26c4769 Mon Sep 17 00:00:00 2001
|
|
From: Huisong Li <lihuisong@huawei.com>
|
|
Date: Thu, 9 Jun 2022 19:49:21 +0800
|
|
Subject: [PATCH 122/122] app/testpmd: fix bonding slave devices not released
|
|
|
|
Currently, some eth devices are added to bond device, these devices are
|
|
not released when the quit command is executed in testpmd. This patch
|
|
adds the release operation for all active slaves under a bond device.
|
|
|
|
Fixes: 0e545d3047fe ("app/testpmd: check stopping port is not in bonding")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Huisong Li <lihuisong@huawei.com>
|
|
Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
|
|
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
|
|
Acked-by: Ferruh Yigit <ferruh.yigit@xilinx.com>
|
|
---
|
|
app/test-pmd/cmdline.c | 1 +
|
|
app/test-pmd/testpmd.c | 41 +++++++++++++++++++++++++++++++++++++++++
|
|
app/test-pmd/testpmd.h | 2 ++
|
|
3 files changed, 44 insertions(+)
|
|
|
|
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
|
|
index 1991ee3446..1f9fd61394 100644
|
|
--- a/app/test-pmd/cmdline.c
|
|
+++ b/app/test-pmd/cmdline.c
|
|
@@ -8764,6 +8764,7 @@ static void cmd_quit_parsed(__rte_unused void *parsed_result,
|
|
__rte_unused void *data)
|
|
{
|
|
cmdline_quit(cl);
|
|
+ cl_quit = 1;
|
|
}
|
|
|
|
cmdline_parse_token_string_t cmd_quit_quit =
|
|
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
|
|
index ac090bde06..66d5167f57 100644
|
|
--- a/app/test-pmd/testpmd.c
|
|
+++ b/app/test-pmd/testpmd.c
|
|
@@ -223,6 +223,7 @@ unsigned int xstats_display_num; /**< Size of extended statistics to show */
|
|
* option. Set flag to exit stats period loop after received SIGINT/SIGTERM.
|
|
*/
|
|
uint8_t f_quit;
|
|
+uint8_t cl_quit; /* Quit testpmd from cmdline. */
|
|
|
|
/*
|
|
* Max Rx frame size, set by '--max-pkt-len' parameter.
|
|
@@ -3174,11 +3175,39 @@ remove_invalid_ports(void)
|
|
nb_cfg_ports = nb_fwd_ports;
|
|
}
|
|
|
|
+static void
|
|
+clear_bonding_slave_device(portid_t *slave_pids, uint16_t num_slaves)
|
|
+{
|
|
+ struct rte_port *port;
|
|
+ portid_t slave_pid;
|
|
+ uint16_t i;
|
|
+
|
|
+ for (i = 0; i < num_slaves; i++) {
|
|
+ slave_pid = slave_pids[i];
|
|
+ if (port_is_started(slave_pid) == 1) {
|
|
+ if (rte_eth_dev_stop(slave_pid) != 0)
|
|
+ fprintf(stderr, "rte_eth_dev_stop failed for port %u\n",
|
|
+ slave_pid);
|
|
+
|
|
+ port = &ports[slave_pid];
|
|
+ port->port_status = RTE_PORT_STOPPED;
|
|
+ }
|
|
+
|
|
+ clear_port_slave_flag(slave_pid);
|
|
+
|
|
+ /* Close slave device when testpmd quit or is killed. */
|
|
+ if (cl_quit == 1 || f_quit == 1)
|
|
+ rte_eth_dev_close(slave_pid);
|
|
+ }
|
|
+}
|
|
+
|
|
void
|
|
close_port(portid_t pid)
|
|
{
|
|
portid_t pi;
|
|
struct rte_port *port;
|
|
+ portid_t slave_pids[RTE_MAX_ETHPORTS];
|
|
+ int num_slaves = 0;
|
|
|
|
if (port_id_is_invalid(pid, ENABLED_WARN))
|
|
return;
|
|
@@ -3213,7 +3242,19 @@ close_port(portid_t pid)
|
|
port_flow_flush(pi);
|
|
port_flex_item_flush(pi);
|
|
port_action_handle_flush(pi);
|
|
+#ifdef RTE_NET_BOND
|
|
+ if (port->bond_flag == 1)
|
|
+ num_slaves = rte_eth_bond_slaves_get(pi,
|
|
+ slave_pids, RTE_MAX_ETHPORTS);
|
|
+#endif
|
|
rte_eth_dev_close(pi);
|
|
+ /*
|
|
+ * If this port is bonded device, all slaves under the
|
|
+ * device need to be removed or closed.
|
|
+ */
|
|
+ if (port->bond_flag == 1 && num_slaves > 0)
|
|
+ clear_bonding_slave_device(slave_pids,
|
|
+ num_slaves);
|
|
}
|
|
|
|
free_xstats_display_info(pi);
|
|
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
|
|
index 042802b205..569b4300cf 100644
|
|
--- a/app/test-pmd/testpmd.h
|
|
+++ b/app/test-pmd/testpmd.h
|
|
@@ -32,6 +32,8 @@
|
|
#define RTE_PORT_CLOSED (uint16_t)2
|
|
#define RTE_PORT_HANDLING (uint16_t)3
|
|
|
|
+extern uint8_t cl_quit;
|
|
+
|
|
/*
|
|
* It is used to allocate the memory for hash key.
|
|
* The hash key size is NIC dependent.
|
|
--
|
|
2.22.0
|
|
|