79 lines
2.6 KiB
Diff
79 lines
2.6 KiB
Diff
From 2d944002762e85e351be7cea432919f159d2ecae Mon Sep 17 00:00:00 2001
|
|
From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com>
|
|
Date: Fri, 17 Apr 2020 16:19:18 +0800
|
|
Subject: net/bonding: fix MAC address when one port resets
|
|
|
|
The current bonding PMD driver call mac_address_slaves_update function
|
|
to modify the MAC address of all slaves devices. In
|
|
mac_address_slaves_update function, the rte_eth_dev_default_mac_addr_set
|
|
API function is called to set the MAC address of the slave devices in
|
|
turn in the for loop statement.
|
|
|
|
When one port reset, calling rte_eth_dev_default_mac_addr_set API fails
|
|
because the firmware will not respond to the commands from the driver,
|
|
and exit the loop, so other slave devices cannot continue to update the
|
|
MAC address.
|
|
|
|
This patch fixes the issue by avoid exiting the loop when calling
|
|
rte_eth_dev_default_mac_addr_set fails.
|
|
|
|
Fixes: 2efb58cbab6e ("bond: new link bonding library")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Hongbo Zheng <zhenghongbo3@huawei.com>
|
|
Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
|
|
Signed-off-by: Chunsong Feng <fengchunsong@huawei.com>
|
|
Signed-off-by: Xuan Li <lixuan47@hisilicon.com>
|
|
---
|
|
drivers/net/bonding/rte_eth_bond_pmd.c | 7 +++++--
|
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
(limited to 'drivers/net/bonding')
|
|
|
|
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
|
|
index 6f361c7b2c..116e2f29de 100644
|
|
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
|
|
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
|
|
@@ -1502,6 +1502,7 @@ int
|
|
mac_address_slaves_update(struct rte_eth_dev *bonded_eth_dev)
|
|
{
|
|
struct bond_dev_private *internals = bonded_eth_dev->data->dev_private;
|
|
+ bool set;
|
|
int i;
|
|
|
|
/* Update slave devices MAC addresses */
|
|
@@ -1529,6 +1530,7 @@ mac_address_slaves_update(struct rte_eth_dev *bonded_eth_dev)
|
|
case BONDING_MODE_TLB:
|
|
case BONDING_MODE_ALB:
|
|
default:
|
|
+ set = true;
|
|
for (i = 0; i < internals->slave_count; i++) {
|
|
if (internals->slaves[i].port_id ==
|
|
internals->current_primary_port) {
|
|
@@ -1537,7 +1539,7 @@ mac_address_slaves_update(struct rte_eth_dev *bonded_eth_dev)
|
|
bonded_eth_dev->data->mac_addrs)) {
|
|
RTE_BOND_LOG(ERR, "Failed to update port Id %d MAC address",
|
|
internals->current_primary_port);
|
|
- return -1;
|
|
+ set = false;
|
|
}
|
|
} else {
|
|
if (rte_eth_dev_default_mac_addr_set(
|
|
@@ -1545,10 +1547,11 @@ mac_address_slaves_update(struct rte_eth_dev *bonded_eth_dev)
|
|
&internals->slaves[i].persisted_mac_addr)) {
|
|
RTE_BOND_LOG(ERR, "Failed to update port Id %d MAC address",
|
|
internals->slaves[i].port_id);
|
|
- return -1;
|
|
}
|
|
}
|
|
}
|
|
+ if (!set)
|
|
+ return -1;
|
|
}
|
|
|
|
return 0;
|
|
--
|
|
cgit v1.2.1
|
|
|
|
|