From 2d944002762e85e351be7cea432919f159d2ecae Mon Sep 17 00:00:00 2001 From: "Wei Hu (Xavier)" Date: Fri, 17 Apr 2020 16:19:18 +0800 Subject: [PATCH] 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 Signed-off-by: Wei Hu (Xavier) Signed-off-by: Chunsong Feng Signed-off-by: Xuan Li --- drivers/net/bonding/rte_eth_bond_pmd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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; -- 2.20.1