This series include two fixes patches for bonding PMD driver. Wei Hu (Xavier) (2): net/bonding: fix MAC address when switching active port net/bonding: fix MAC address when one port resets drivers/net/bonding/rte_eth_bond_api.c | 1 + drivers/net/bonding/rte_eth_bond_pmd.c | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) -- 2.23.0
From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com> Currently, based on a active-backup bond device, when the link status of the primary port changes from up to down, one slave port changes to the primary port, but the new primary port's MAC address cannot change to the bond device's MAC address. And we can't continue receive packets whose destination MAC addresses are the same as the bond devices's MAC address. The current bonding PMD driver call mac_address_slaves_update function to modify the MAC address of all slaves devices: the primary port using bond device's MAC address, and other slaves devices using the respective MAC address. We found that one error using primary_port instead of current_primary_port in mac_address_slaves_update function. On the other hand, The current bonding PMD driver sets slave devices's MAC address according to the variable named current_primary_port. The variable named current_primary_port changes in the following scenario: 1. Add the slave devices to bond, the first slave port will be regardes as the current_primary_port. If changing the order of adding the slave devices, the value of the variable named current_primary_port will be different. 2. The upper application specifies primary_port via calling the rte_eth_bond_primary_set API function. 3. Delete the primary slave device. 4. The link status of the primary port changes from up to down. We have tested the above 4 cases and found that there are problems that the new primary port's MAC address didn't change to the bond device's MAC address when running case 3 and 4. When current_primary_port changes, the new primary port's MAC address should change at the same time. We also need to call mac_address_slaves_update function to update MAC addresses in case 3 and 4. For more details please refer to: https://bugs.dpdk.org/show_bug.cgi?id=256 Bugzilla ID: 256 Fixes: 2efb58cbab6e ("bond: new link bonding library") Cc: stable@dpdk.org Reported-by: Chunsong Feng <fengchunsong@huawei.com> Signed-off-by: Chunsong Feng <fengchunsong@huawei.com> Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com> --- drivers/net/bonding/rte_eth_bond_api.c | 1 + drivers/net/bonding/rte_eth_bond_pmd.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index f38eb3b47..07780a2ac 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -698,6 +698,7 @@ __eth_bond_slave_remove_lock_free(uint16_t bonded_port_id, internals->current_primary_port = internals->slaves[0].port_id; else internals->primary_port = 0; + mac_address_slaves_update(bonded_eth_dev); } if (internals->active_slave_count < 1) { diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 707a0f3cd..ddae3518c 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -1533,7 +1533,7 @@ mac_address_slaves_update(struct rte_eth_dev *bonded_eth_dev) if (internals->slaves[i].port_id == internals->current_primary_port) { if (rte_eth_dev_default_mac_addr_set( - internals->primary_port, + internals->current_primary_port, bonded_eth_dev->data->mac_addrs)) { RTE_BOND_LOG(ERR, "Failed to update port Id %d MAC address", internals->current_primary_port); @@ -2873,6 +2873,7 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type, internals->active_slaves[0]); else internals->current_primary_port = internals->primary_port; + mac_address_slaves_update(bonded_eth_dev); } } -- 2.23.0
From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com> Currently, based on a active-backup bond device, in the following 2 cases: 1) The primary port resets. The link status of the primary port changes from up to down. 2) When switching the active port, one slave port resets at the same time. one slave port changes to the primary port, but the new primary port's MAC address probably cannot change to the bond device's MAC address. And we can't continue receive packets whose destination MAC addresses are the same as the bond devices's MAC address. 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> --- v1 -> v2: Ignore the failure when updating salves's MAC address in the mac_address_slaves_update function, because it doesn't affect the bond's functional characteristics. The related link about the discussion: http://patches.dpdk.org/patch/66033/ --- 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 ddae3518c..01c0f6eb1 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 setted; 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: + setted = 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; + setted = 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 (!setted) + return -1; } return 0; -- 2.23.0
Hi, Chas Williams
Thanks for your comments on Patch V1. now we have sent Patch V2.
Could you please give some suggestion on them?
Thanks.
Best Regards
Xavier
On 2020/4/17 16:19, Wei Hu (Xavier) wrote:
> From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com>
>
> Currently, based on a active-backup bond device, in the following 2 cases:
> 1) The primary port resets. The link status of the primary port changes
> from up to down.
> 2) When switching the active port, one slave port resets at the same time.
> one slave port changes to the primary port, but the new primary port's MAC
> address probably cannot change to the bond device's MAC address. And we
> can't continue receive packets whose destination MAC addresses are the same
> as the bond devices's MAC address.
>
> 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>
> ---
> v1 -> v2:
> Ignore the failure when updating salves's MAC address in the
> mac_address_slaves_update function, because it doesn't affect
> the bond's functional characteristics. The related link about
> the discussion:
> http://patches.dpdk.org/patch/66033/
> ---
> 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 ddae3518c..01c0f6eb1 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 setted;
> 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:
> + setted = 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;
> + setted = 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 (!setted)
> + return -1;
> }
>
> return 0;
>
Hi, Chas Williams
Could you please give some suggestion on them?
Thanks.
Best Regards
Xavier
On 2020/4/17 16:19, Wei Hu (Xavier) wrote:
> This series include two fixes patches for bonding PMD driver.
>
> Wei Hu (Xavier) (2):
> net/bonding: fix MAC address when switching active port
> net/bonding: fix MAC address when one port resets
>
> drivers/net/bonding/rte_eth_bond_api.c | 1 +
> drivers/net/bonding/rte_eth_bond_pmd.c | 10 +++++++---
> 2 files changed, 8 insertions(+), 3 deletions(-)
>
Hi, Ferruh Yigit & Chas Williams
Could you please give any suggestion?
Thanks.
Best Regards
Xavier
On 2020/4/17 16:58, Wei Hu (Xavier) wrote:
> Hi, Chas Williams
> Thanks for your comments on Patch V1. now we have sent Patch V2.
> Could you please give some suggestion on them?
> Thanks.
>
> Best Regards
> Xavier
>
> On 2020/4/17 16:19, Wei Hu (Xavier) wrote:
>> From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com>
>>
>> Currently, based on a active-backup bond device, in the following 2
>> cases:
>> 1) The primary port resets. The link status of the primary port changes
>> from up to down.
>> 2) When switching the active port, one slave port resets at the same
>> time.
>> one slave port changes to the primary port, but the new primary port's
>> MAC
>> address probably cannot change to the bond device's MAC address. And we
>> can't continue receive packets whose destination MAC addresses are the
>> same
>> as the bond devices's MAC address.
>>
>> 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>
>> ---
>> v1 -> v2:
>> Ignore the failure when updating salves's MAC address in the
>> mac_address_slaves_update function, because it doesn't affect
>> the bond's functional characteristics. The related link about
>> the discussion:
>> http://patches.dpdk.org/patch/66033/
>> ---
>> 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 ddae3518c..01c0f6eb1 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 setted;
>> 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:
>> + setted = 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;
>> + setted = 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 (!setted)
>> + return -1;
>> }
>> return 0;
>>
On 5/15/2020 4:11 AM, Wei Hu (Xavier) wrote: > Hi, Ferruh Yigit & Chas Williams > Could you please give any suggestion? Hi Xavier, Unfortunately we are missing reviews in bonding patches. There are a few more waiting other than this one. If you are already working on it and have enough information about the code, what do you think adding you as the additional maintainer? Thanks, ferruh > Thanks. > > Best Regards > Xavier > > On 2020/4/17 16:58, Wei Hu (Xavier) wrote: >> Hi, Chas Williams >> Thanks for your comments on Patch V1. now we have sent Patch V2. >> Could you please give some suggestion on them? >> Thanks. >> >> Best Regards >> Xavier >> >> On 2020/4/17 16:19, Wei Hu (Xavier) wrote: >>> From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com> >>> >>> Currently, based on a active-backup bond device, in the following 2 >>> cases: >>> 1) The primary port resets. The link status of the primary port changes >>> from up to down. >>> 2) When switching the active port, one slave port resets at the same >>> time. >>> one slave port changes to the primary port, but the new primary port's >>> MAC >>> address probably cannot change to the bond device's MAC address. And we >>> can't continue receive packets whose destination MAC addresses are the >>> same >>> as the bond devices's MAC address. >>> >>> 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> >>> --- >>> v1 -> v2: >>> Ignore the failure when updating salves's MAC address in the >>> mac_address_slaves_update function, because it doesn't affect >>> the bond's functional characteristics. The related link about >>> the discussion: >>> http://patches.dpdk.org/patch/66033/ >>> --- >>> 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 ddae3518c..01c0f6eb1 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 setted; >>> 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: >>> + setted = 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; >>> + setted = 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 (!setted) >>> + return -1; >>> } >>> return 0; >>>
On 2020/5/16 16:59, Wei Hu (Xavier) wrote: > > > > -------- Forwarded Message -------- > Subject: Re: [dpdk-dev] [PATCH v2 2/2] net/bonding: fix MAC address > when one port resets > Date: Fri, 15 May 2020 11:46:30 +0100 > From: Ferruh Yigit <ferruh.yigit@intel.com> > To: Wei Hu (Xavier) <huwei013@chinasoftinc.com>, Chas Williams > <3chas3@gmail.com> > CC: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>, David > Marchand <david.marchand@redhat.com> > > On 5/15/2020 4:11 AM, Wei Hu (Xavier) wrote: >> Hi, Ferruh Yigit & Chas Williams >> Could you please give any suggestion? > > Hi Xavier, > > Unfortunately we are missing reviews in bonding patches. There are a > few more > waiting other than this one. > > If you are already working on it and have enough information about the > code, > what do you think adding you as the additional maintainer? > Hi, Ferruh Yigit I'm glad to do something like this. Thanks, Xavier > Thanks, > ferruh > >> Thanks. >> >> Best Regards >> Xavier >> >> On 2020/4/17 16:58, Wei Hu (Xavier) wrote: >>> Hi, Chas Williams >>> Thanks for your comments on Patch V1. now we have sent Patch V2. >>> Could you please give some suggestion on them? >>> Thanks. >>> >>> Best Regards >>> Xavier >>> >>> On 2020/4/17 16:19, Wei Hu (Xavier) wrote: >>>> From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com> >>>> >>>> Currently, based on a active-backup bond device, in the following 2 >>>> cases: >>>> 1) The primary port resets. The link status of the primary port >>>> changes >>>> from up to down. >>>> 2) When switching the active port, one slave port resets at the >>>> same time. >>>> one slave port changes to the primary port, but the new primary >>>> port's MAC >>>> address probably cannot change to the bond device's MAC address. >>>> And we >>>> can't continue receive packets whose destination MAC addresses are >>>> the same >>>> as the bond devices's MAC address. >>>> >>>> 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> >>>> --- >>>> v1 -> v2: >>>> Ignore the failure when updating salves's MAC address in the >>>> mac_address_slaves_update function, because it doesn't affect >>>> the bond's functional characteristics. The related link about >>>> the discussion: >>>> http://patches.dpdk.org/patch/66033/ >>>> --- >>>> 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 ddae3518c..01c0f6eb1 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 setted; >>>> 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: >>>> + setted = 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; >>>> + setted = 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 (!setted) >>>> + return -1; >>>> } >>>> return 0; >>>> > > . >
On 2020/5/16 16:59, Wei Hu (Xavier) wrote: > > > > -------- Forwarded Message -------- > Subject: Re: [dpdk-dev] [PATCH v2 2/2] net/bonding: fix MAC address > when one port resets > Date: Fri, 15 May 2020 11:46:30 +0100 > From: Ferruh Yigit <ferruh.yigit@intel.com> > To: Wei Hu (Xavier) <huwei013@chinasoftinc.com>, Chas Williams > <3chas3@gmail.com> > CC: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>, David > Marchand <david.marchand@redhat.com> > > On 5/15/2020 4:11 AM, Wei Hu (Xavier) wrote: >> Hi, Ferruh Yigit & Chas Williams >> Could you please give any suggestion? > > Hi Xavier, > > Unfortunately we are missing reviews in bonding patches. There are a > few more > waiting other than this one. > > If you are already working on it and have enough information about the > code, > what do you think adding you as the additional maintainer? > Hi, Ferruh Yigit I'm glad to do something like this. Thanks, Xavier > Thanks, > ferruh > >> Thanks. >> >> Best Regards >> Xavier >> >> On 2020/4/17 16:58, Wei Hu (Xavier) wrote: >>> Hi, Chas Williams >>> Thanks for your comments on Patch V1. now we have sent Patch V2. >>> Could you please give some suggestion on them? >>> Thanks. >>> >>> Best Regards >>> Xavier >>> >>> On 2020/4/17 16:19, Wei Hu (Xavier) wrote: >>>> From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com> >>>> >>>> Currently, based on a active-backup bond device, in the following 2 >>>> cases: >>>> 1) The primary port resets. The link status of the primary port >>>> changes >>>> from up to down. >>>> 2) When switching the active port, one slave port resets at the >>>> same time. >>>> one slave port changes to the primary port, but the new primary >>>> port's MAC >>>> address probably cannot change to the bond device's MAC address. >>>> And we >>>> can't continue receive packets whose destination MAC addresses are >>>> the same >>>> as the bond devices's MAC address. >>>> >>>> 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> >>>> --- >>>> v1 -> v2: >>>> Ignore the failure when updating salves's MAC address in the >>>> mac_address_slaves_update function, because it doesn't affect >>>> the bond's functional characteristics. The related link about >>>> the discussion: >>>> http://patches.dpdk.org/patch/66033/ >>>> --- >>>> 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 ddae3518c..01c0f6eb1 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 setted; >>>> 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: >>>> + setted = 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; >>>> + setted = 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 (!setted) >>>> + return -1; >>>> } >>>> return 0; >>>> > > . >
On 5/16/2020 10:51 AM, Wei Hu (Xavier) wrote: > > > On 2020/5/16 16:59, Wei Hu (Xavier) wrote: >> >> >> >> -------- Forwarded Message -------- >> Subject: Re: [dpdk-dev] [PATCH v2 2/2] net/bonding: fix MAC address >> when one port resets >> Date: Fri, 15 May 2020 11:46:30 +0100 >> From: Ferruh Yigit <ferruh.yigit@intel.com> >> To: Wei Hu (Xavier) <huwei013@chinasoftinc.com>, Chas Williams >> <3chas3@gmail.com> >> CC: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>, David >> Marchand <david.marchand@redhat.com> >> >> On 5/15/2020 4:11 AM, Wei Hu (Xavier) wrote: >>> Hi, Ferruh Yigit & Chas Williams >>> Could you please give any suggestion? >> >> Hi Xavier, >> >> Unfortunately we are missing reviews in bonding patches. There are a >> few more >> waiting other than this one. >> >> If you are already working on it and have enough information about the >> code, >> what do you think adding you as the additional maintainer? >> > Hi, Ferruh Yigit > > I'm glad to do something like this. > Great news, thanks. Can you please send a patch to add your name as bonding maintainer to the MAINTAINERS file [1]? For this release it may be late, but hopefully we can close the outstanding bonding patches in next release. Thanks, ferruh [1] http://lxr.dpdk.org/dpdk/v20.02/source/MAINTAINERS#L528
On 2020/5/18 17:55, Ferruh Yigit wrote: > On 5/16/2020 10:51 AM, Wei Hu (Xavier) wrote: >> >> On 2020/5/16 16:59, Wei Hu (Xavier) wrote: >>> >>> >>> -------- Forwarded Message -------- >>> Subject: Re: [dpdk-dev] [PATCH v2 2/2] net/bonding: fix MAC address >>> when one port resets >>> Date: Fri, 15 May 2020 11:46:30 +0100 >>> From: Ferruh Yigit <ferruh.yigit@intel.com> >>> To: Wei Hu (Xavier) <huwei013@chinasoftinc.com>, Chas Williams >>> <3chas3@gmail.com> >>> CC: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>, David >>> Marchand <david.marchand@redhat.com> >>> >>> On 5/15/2020 4:11 AM, Wei Hu (Xavier) wrote: >>>> Hi, Ferruh Yigit & Chas Williams >>>> Could you please give any suggestion? >>> Hi Xavier, >>> >>> Unfortunately we are missing reviews in bonding patches. There are a >>> few more >>> waiting other than this one. >>> >>> If you are already working on it and have enough information about the >>> code, >>> what do you think adding you as the additional maintainer? >>> >> Hi, Ferruh Yigit >> >> I'm glad to do something like this. >> > Great news, thanks. > Can you please send a patch to add your name as bonding maintainer to the > MAINTAINERS file [1]? > > For this release it may be late, but hopefully we can close the outstanding > bonding patches in next release. Ok, I will send the patch at once. Thanks, Xavier > Thanks, > ferruh > > [1] > http://lxr.dpdk.org/dpdk/v20.02/source/MAINTAINERS#L528 >
Hi, Ferruh Yigit & Chas Williams
Any other comments?
If there are not other comment, could we consider apply this patch? :-)
Thanks, Xavier
On 2020/5/18 19:12, Wei Hu (Xavier) wrote:
>
>
> On 2020/5/18 17:55, Ferruh Yigit wrote:
>> On 5/16/2020 10:51 AM, Wei Hu (Xavier) wrote:
>>>
>>> On 2020/5/16 16:59, Wei Hu (Xavier) wrote:
>>>>
>>>>
>>>> -------- Forwarded Message --------
>>>> Subject: Re: [dpdk-dev] [PATCH v2 2/2] net/bonding: fix MAC address
>>>> when one port resets
>>>> Date: Fri, 15 May 2020 11:46:30 +0100
>>>> From: Ferruh Yigit <ferruh.yigit@intel.com>
>>>> To: Wei Hu (Xavier) <huwei013@chinasoftinc.com>, Chas Williams
>>>> <3chas3@gmail.com>
>>>> CC: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>, David
>>>> Marchand <david.marchand@redhat.com>
>>>>
>>>> On 5/15/2020 4:11 AM, Wei Hu (Xavier) wrote:
>>>>> Hi, Ferruh Yigit & Chas Williams
>>>>> Could you please give any suggestion?
>>>> Hi Xavier,
>>>>
>>>> Unfortunately we are missing reviews in bonding patches. There are a
>>>> few more
>>>> waiting other than this one.
>>>>
>>>> If you are already working on it and have enough information about the
>>>> code,
>>>> what do you think adding you as the additional maintainer?
>>>>
>>> Hi, Ferruh Yigit
>>>
>>> I'm glad to do something like this.
>>>
>> Great news, thanks.
>> Can you please send a patch to add your name as bonding maintainer to
>> the
>> MAINTAINERS file [1]?
>>
>> For this release it may be late, but hopefully we can close the
>> outstanding
>> bonding patches in next release.
> Ok, I will send the patch at once.
>
> Thanks,
> Xavier
>> Thanks,
>> ferruh
>>
>> [1]
>> http://lxr.dpdk.org/dpdk/v20.02/source/MAINTAINERS#L528
>>
>
>
> _______________________________________________
> Linuxarm mailing list
> Linuxarm@huawei.com
> http://hulk.huawei.com/mailman/listinfo/linuxarm
> .
>
On 7/15/2020 12:03 PM, Wei Hu (Xavier) wrote: > Hi, Ferruh Yigit & Chas Williams > > Any other comments? > > If there are not other comment, could we consider apply this patch? :-) This is an old patch, since there is no objection up until now, Series applied to dpdk-next-net/master, thanks. series: https://patches.dpdk.org/project/dpdk/list/?series=9456 > > Thanks, Xavier > > On 2020/5/18 19:12, Wei Hu (Xavier) wrote: >> >> >> On 2020/5/18 17:55, Ferruh Yigit wrote: >>> On 5/16/2020 10:51 AM, Wei Hu (Xavier) wrote: >>>> >>>> On 2020/5/16 16:59, Wei Hu (Xavier) wrote: >>>>> >>>>> >>>>> -------- Forwarded Message -------- >>>>> Subject: Re: [dpdk-dev] [PATCH v2 2/2] net/bonding: fix MAC address >>>>> when one port resets >>>>> Date: Fri, 15 May 2020 11:46:30 +0100 >>>>> From: Ferruh Yigit <ferruh.yigit@intel.com> >>>>> To: Wei Hu (Xavier) <huwei013@chinasoftinc.com>, Chas Williams >>>>> <3chas3@gmail.com> >>>>> CC: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>, David >>>>> Marchand <david.marchand@redhat.com> >>>>> >>>>> On 5/15/2020 4:11 AM, Wei Hu (Xavier) wrote: >>>>>> Hi, Ferruh Yigit & Chas Williams >>>>>> Could you please give any suggestion? >>>>> Hi Xavier, >>>>> >>>>> Unfortunately we are missing reviews in bonding patches. There are a >>>>> few more >>>>> waiting other than this one. >>>>> >>>>> If you are already working on it and have enough information about the >>>>> code, >>>>> what do you think adding you as the additional maintainer? >>>>> >>>> Hi, Ferruh Yigit >>>> >>>> I'm glad to do something like this. >>>> >>> Great news, thanks. >>> Can you please send a patch to add your name as bonding maintainer to >>> the >>> MAINTAINERS file [1]? >>> >>> For this release it may be late, but hopefully we can close the >>> outstanding >>> bonding patches in next release. >> Ok, I will send the patch at once. >> >> Thanks, >> Xavier >>> Thanks, >>> ferruh >>> >>> [1] >>> http://lxr.dpdk.org/dpdk/v20.02/source/MAINTAINERS#L528 >>> >> >> >> _______________________________________________ >> Linuxarm mailing list >> Linuxarm@huawei.com >> http://hulk.huawei.com/mailman/listinfo/linuxarm >> . >> >