Signed-off-by: speech_white <humin29@huawei.com> (cherry picked from commit f45233a17346da681c41b30fa02a32c7c5a36f49)
72 lines
2.7 KiB
Diff
72 lines
2.7 KiB
Diff
From ef72dacdec6c5dca8773854906159f7bc75eeb5c Mon Sep 17 00:00:00 2001
|
|
From: Chengchang Tang <tangchengchang@huawei.com>
|
|
Date: Tue, 9 Nov 2021 15:57:26 +0800
|
|
Subject: [PATCH] net/bonding: fix offloading configuration
|
|
|
|
Currently, part offloadings of the bonding device will not take effect
|
|
by using dev_configure(). Because the related configuration will not be
|
|
delivered to the slave devices in this way.
|
|
|
|
The offloading capability of the bonding device is the intersection of
|
|
the capability of all slave devices. Based on this, the following
|
|
functions are added to the bonding driver:
|
|
1. If a Tx offloading is within the capability of the bonding device
|
|
(i.e, all the slave devices support this Tx offloading), the enabling
|
|
status of the offloading of all slave devices depends on the
|
|
configuration of the bonding device.
|
|
|
|
2. For the Tx offloading that is not within the Tx offloading capability
|
|
of the bonding device, the enabling status of the offloading on the
|
|
slave devices is irrelevant to the bonding device configuration. And
|
|
it depends on the original configuration of the slave devices.
|
|
|
|
Fixes: e8b3e1a9b1bb ("net/bonding: switch to new offloading API")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
|
|
Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
|
|
---
|
|
drivers/net/bonding/rte_eth_bond_pmd.c | 23 +++++++++++++++--------
|
|
1 file changed, 15 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
|
|
index 84f4900ee5..0f11a2f5a8 100644
|
|
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
|
|
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
|
|
@@ -1713,17 +1713,24 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev,
|
|
bonded_eth_dev->data->dev_conf.rxmode.mq_mode;
|
|
}
|
|
|
|
- if (bonded_eth_dev->data->dev_conf.rxmode.offloads &
|
|
- RTE_ETH_RX_OFFLOAD_VLAN_FILTER)
|
|
- slave_eth_dev->data->dev_conf.rxmode.offloads |=
|
|
- RTE_ETH_RX_OFFLOAD_VLAN_FILTER;
|
|
- else
|
|
- slave_eth_dev->data->dev_conf.rxmode.offloads &=
|
|
- ~RTE_ETH_RX_OFFLOAD_VLAN_FILTER;
|
|
-
|
|
slave_eth_dev->data->dev_conf.rxmode.mtu =
|
|
bonded_eth_dev->data->dev_conf.rxmode.mtu;
|
|
|
|
+ slave_eth_dev->data->dev_conf.txmode.offloads |=
|
|
+ bonded_eth_dev->data->dev_conf.txmode.offloads;
|
|
+
|
|
+ slave_eth_dev->data->dev_conf.txmode.offloads &=
|
|
+ (bonded_eth_dev->data->dev_conf.txmode.offloads |
|
|
+ ~internals->tx_offload_capa);
|
|
+
|
|
+ slave_eth_dev->data->dev_conf.rxmode.offloads |=
|
|
+ bonded_eth_dev->data->dev_conf.rxmode.offloads;
|
|
+
|
|
+ slave_eth_dev->data->dev_conf.rxmode.offloads &=
|
|
+ (bonded_eth_dev->data->dev_conf.rxmode.offloads |
|
|
+ ~internals->rx_offload_capa);
|
|
+
|
|
+
|
|
nb_rx_queues = bonded_eth_dev->data->nb_rx_queues;
|
|
nb_tx_queues = bonded_eth_dev->data->nb_tx_queues;
|
|
|
|
--
|
|
2.33.0
|
|
|