From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 32736A0562; Sat, 4 Apr 2020 16:07:28 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3E9CD14583; Sat, 4 Apr 2020 16:07:27 +0200 (CEST) Received: from mail-qv1-f66.google.com (mail-qv1-f66.google.com [209.85.219.66]) by dpdk.org (Postfix) with ESMTP id 5EAB1AAD5 for ; Sat, 4 Apr 2020 16:07:25 +0200 (CEST) Received: by mail-qv1-f66.google.com with SMTP id bu9so5084047qvb.13 for ; Sat, 04 Apr 2020 07:07:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=UDC7YCJdUYufq5VrLIJ4pHSgNROHL5/GjKzI5JRGlss=; b=YRR8/nGMZU5qelmY/4CUvQ8sMH6LjTY/nAEq7ExGkYSYfDK926ONEJ7ffHt9J+MEyd 0v8bdmbXrhxBz/lxt3qFGv8o9gXQYueRI3yCKY1sLSZwoAtl7e6Jpwka7PFgpvk+Nq3G AIyajuTY7Bs2BrKHhzCQdY+9jg8MpPTvsgbaxblFt5NTGaMPXMsn7w55x2f16o28s3W+ qtWBSZClPu05CAi7Sar8S6OelyoCRuz/J7T0eHU0sODFFBupQVkY8DA79RUzUhx0t0w+ ucnlpQT9k3ne+ikkAe0l9fBJ4pzCQJYb6HXkflceJK3McoJsSO12wP6rNr/HdxzA3moq DBIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=UDC7YCJdUYufq5VrLIJ4pHSgNROHL5/GjKzI5JRGlss=; b=Pb2ev5oGH7CyvSCew9mgtxGNEFShn/EjzJI1+hWvrBf0e7Chb1cgWCJ8b8wg964doU FkkNBRo0EWkbXD+snsJI+7d96UIAE5+Gwy7a5cjIT3hDZhS451V+NaMgHYeAa1/ofQqT rd5CD+q0ACdhC2ymoD/BUin5PSuLpD+wxfApXDeYCHHlVC8WDWvByfy3r4k6e7RYtF7b jKYjaqOabs3bCM53uuqGPV+i7KPs2ss65w/qSOQBgcpibB8TZYk79/wLCc2kOs8UrqIe W/e7Lun3PPAHowWKRbXoZ1RagQs+4Pq5ppGAJTtLLD9CpneR2gttYE0ybPz6eaZIdPSm tE8w== X-Gm-Message-State: AGi0PubOZSyWfF/pAhQIPVJmHp9BgqeaKiUzy7Pu+Qi79o6M+Nuz610I Q361i5mR7wlwaR0hQnGVzBYAbjuK X-Google-Smtp-Source: APiQypLU3l1aoDqgKgzMWR1B3thA63QWkeXKTqngUMKtxih7pHWD5Hk7spJ/uNEUAx5+8sQntXJqwA== X-Received: by 2002:a0c:a8e9:: with SMTP id h41mr13269449qvc.235.1586009243999; Sat, 04 Apr 2020 07:07:23 -0700 (PDT) Received: from [192.168.1.10] (pool-96-255-60-31.washdc.fios.verizon.net. [96.255.60.31]) by smtp.gmail.com with ESMTPSA id 193sm8364877qkj.1.2020.04.04.07.07.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 04 Apr 2020 07:07:23 -0700 (PDT) To: "Wei Hu (Xavier)" , dev@dpdk.org References: <20200225092903.38455-1-huwei013@chinasoftinc.com> <20200225092903.38455-3-huwei013@chinasoftinc.com> From: Chas Williams <3chas3@gmail.com> Message-ID: <8eb94e8b-f918-cdcb-bc5f-b8023cf5a4e4@gmail.com> Date: Sat, 4 Apr 2020 10:07:22 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <20200225092903.38455-3-huwei013@chinasoftinc.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH 2/2] net/bonding: fix MAC address when one port resets X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The behavior is probably going to be inconsistent. Only one of the calls to mac_address_slaves_update() is checked for failure. The two calls are in bond_ethdev_lsc_event_callback() if (internals->active_slave_count < 1) { mac_address_slaves_update(bonded_eth_dev); and in bond_ethdev_start(): /* Update all slave devices MACs*/ if (mac_address_slaves_update(eth_dev) != 0) goto out_err; So if the bond device is running, you safely fail to the backup device. But if you stop and start the bond device, it will then fail to start? What devices are you bonding together that aren't able to support changing their MAC addresses reliably? ixgbe VF devices by any chance? One solution is to always assume success or ignore the error from devices that you know are not an issue. I agree that we shouldn't early exit from mac_address_slaves_update(). I am not sure how to handle the error. We probably shouldn't allow you to bond devices that don't support setting MAC address. I don't think this check exists currently. That's possibly one reason for this check. On 2/25/20 4:29 AM, Wei Hu (Xavier) wrote: > From: "Wei Hu (Xavier)" > > 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 > Signed-off-by: Wei Hu (Xavier) > Signed-off-by: Chunsong Feng > Signed-off-by: Xuan Li > --- > drivers/net/bonding/rte_eth_bond_pmd.c | 8 ++++++-- > 1 file changed, 6 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..ba3f342e7 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,12 @@ 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; > + setted = false; > } > } > } > + if (!setted) > + return -1; > } > > return 0; >