On Fri, Feb 12, 2021 at 4:10 PM Dey, Souvik <so...@rbbn.com> wrote:
>
> From: Souvik Dey <so...@rbbn.com>
>
> [ upstream commit 493f0bb51c1144eedcff2bba199cab1b64ff9fd0 ]

Thanks, added

>
> As the internal MAC table is divided into Unicast and Multicast address
> sections, we should check the type of synched MAC address before storing
> it to the internal table. Currently the check is not done, and the
> synched MAC of 33:33:00:00:00:01 gets stored in the unicast section
> (mostly index 1) causing all subsequent mlx5_set_mc_addr_list()
> to fail with error -EADDRINUSE, as the mac_list contains the MAC
> 33:33:00:00:00:01. This denies adding of any new multicast address to
> the internal list and also fails to add the MAC address to the device
> in case of SR-IOV VF.
>
> Fixes: f22442cb5d42 ("net/mlx5: reduce Netlink commands dependencies")
> Fixes: ccdcba53a3f4 ("net/mlx5: use Netlink to add/remove MAC addresses")
>
> Signed-off-by: Souvik Dey <so...@rbbn.com>
> ---
>  drivers/net/mlx5/mlx5_nl.c | 21 ++++++++++++++++-----
>  1 file changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/mlx5/mlx5_nl.c b/drivers/net/mlx5/mlx5_nl.c
> index 64580b9..add756d 100644
> --- a/drivers/net/mlx5/mlx5_nl.c
> +++ b/drivers/net/mlx5/mlx5_nl.c
> @@ -678,11 +678,22 @@ mlx5_nl_mac_addr_sync(struct rte_eth_dev *dev)
>                                 break;
>                 if (j != MLX5_MAX_MAC_ADDRESSES)
>                         continue;
> -               /* Find the first entry available. */
> -               for (j = 0; j != MLX5_MAX_MAC_ADDRESSES; ++j) {
> -                       if (rte_is_zero_ether_addr(&dev->data->mac_addrs[j])) 
> {
> -                               dev->data->mac_addrs[j] = macs[i];
> -                               break;
> +               if (rte_is_multicast_ether_addr(&macs[i])) {
> +                       /* Find the first entry available. */
> +                       for (j = MLX5_MAX_UC_MAC_ADDRESSES;
> +                            j != MLX5_MAX_MAC_ADDRESSES; ++j) {
> +                               if (rte_is_zero_ether_addr(&mac_addrs[j])) {
> +                                       mac_addrs[j] = macs[i];
> +                                       break;
> +                               }
> +                       }
> +               } else {
> +                       /* Find the first entry available. */
> +                       for (j = 0; j != MLX5_MAX_UC_MAC_ADDRESSES; ++j) {
> +                               if (rte_is_zero_ether_addr(&mac_addrs[j])) {
> +                                       mac_addrs[j] = macs[i];
> +                                       break;
> +                               }
>                         }
>                 }
>         }
> --
> 2.9.3.windows.1
>
>
> Notice: This e-mail together with any attachments may contain information of 
> Ribbon Communications Inc. and its Affiliates that is confidential and/or 
> proprietary for the sole use of the intended recipient. Any review, 
> disclosure, reliance or distribution by others or forwarding without express 
> permission is strictly prohibited. If you are not the intended recipient, 
> please notify the sender immediately and then delete all copies, including 
> any attachments.



-- 
Christian Ehrhardt
Staff Engineer, Ubuntu Server
Canonical Ltd

Reply via email to