代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/dpdk 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 97b384c9ecb993ea111bd7648a0aac9127917d22 Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Tue, 15 Nov 2022 12:06:10 +0800
Subject: app/testpmd: update bond port configurations when add slave
[ upstream commit 76376bd9cd491fb0ca9c0b78346cee0ca7c4a351 ]
Some capabilities (like, rx_offload_capa and tx_offload_capa) of bonding
device in dev_info is zero when no slave is added. And its capability will
be updated when add a new slave device.
The capability to update dynamically may introduce some problems if not
handled properly. For example, the reconfig() is called to initialize
bonding port configurations when create a bonding device. The global
tx_mode is assigned to dev_conf.txmode. The DEV_TX_OFFLOAD_MBUF_FAST_FREE
which is the default value of global tx_mode.offloads in testpmd is removed
from bonding device configuration because of zero rx_offload_capa.
As a result, this offload isn't set to bonding device.
Generally, port configurations of bonding device must be within the
intersection of the capability of all slave devices. If use original port
configurations, the removed capabilities because of adding a new slave may
cause failure when re-initialize bonding device.
So port configurations of bonding device need to be updated because of the
added and removed capabilities. In addition, this also helps to ensure
consistency between testpmd and bonding device.
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Min Hu (Connor) <humin29@huawei.com>
---
app/test-pmd/testpmd.c | 40 ++++++++++++++++++++++++++++++++++++++++
app/test-pmd/testpmd.h | 3 ++-
2 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index ff9eabbcb7..32098d4701 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -2778,6 +2778,41 @@ fill_xstats_display_info(void)
fill_xstats_display_info_for_port(pi);
}
+/*
+ * Some capabilities (like, rx_offload_capa and tx_offload_capa) of bonding
+ * device in dev_info is zero when no slave is added. And its capability
+ * will be updated when add a new slave device. So adding a slave device need
+ * to update the port configurations of bonding device.
+ */
+static void
+update_bonding_port_dev_conf(portid_t bond_pid)
+{
+#ifdef RTE_NET_BOND
+ struct rte_port *port = &ports[bond_pid];
+ uint16_t i;
+ int ret;
+
+ ret = eth_dev_info_get_print_err(bond_pid, &port->dev_info);
+ if (ret != 0) {
+ fprintf(stderr, "Failed to get dev info for port = %u\n",
+ bond_pid);
+ return;
+ }
+
+ if (port->dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE)
+ port->dev_conf.txmode.offloads |=
+ RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE;
+ /* Apply Tx offloads configuration */
+ for (i = 0; i < port->dev_info.max_tx_queues; i++)
+ port->tx_conf[i].offloads = port->dev_conf.txmode.offloads;
+
+ port->dev_conf.rx_adv_conf.rss_conf.rss_hf &=
+ port->dev_info.flow_type_rss_offloads;
+#else
+ RTE_SET_USED(bond_pid);
+#endif
+}
+
int
start_port(portid_t pid)
{
@@ -2842,6 +2877,11 @@ start_port(portid_t pid)
return -1;
}
+ if (port->bond_flag == 1 && port->update_conf == 1) {
+ update_bonding_port_dev_conf(pi);
+ port->update_conf = 0;
+ }
+
/* configure port */
diag = eth_dev_configure_mp(pi, nb_rxq + nb_hairpinq,
nb_txq + nb_hairpinq,
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 442f97ce3d..480dc3fa34 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -248,7 +248,8 @@ struct rte_port {
uint32_t mc_addr_nb; /**< nb. of addr. in mc_addr_pool */
uint8_t slave_flag : 1, /**< bonding slave port */
bond_flag : 1, /**< port is bond device */
- fwd_mac_swap : 1; /**< swap packet MAC before forward */
+ fwd_mac_swap : 1, /**< swap packet MAC before forward */
+ update_conf : 1; /**< need to update bonding device configuration */
struct port_flow *flow_list; /**< Associated flows. */
struct port_indirect_action *actions_list;
/**< Associated indirect actions. */
--
2.23.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。