Improve MAC address handling in mlx5_vdpa_set_attr() to ensure that old MAC entries are properly removed from the MPFS table before adding a new one. The new MAC address is then added to both the MPFS and VLAN tables.
Warnings are issued if deleting or adding a MAC entry fails, but the function continues to execute in order to keep the configuration as consistent as possible with the hardware state. This change fixes an issue where the updated MAC address would not take effect until the qemu was rebooted Signed-off-by: Cindy Lu <[email protected]> --- drivers/vdpa/mlx5/net/mlx5_vnet.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c index e38aa3a335fc..4bc39cb76268 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -4067,10 +4067,26 @@ static int mlx5_vdpa_set_attr(struct vdpa_mgmt_dev *v_mdev, struct vdpa_device * down_write(&ndev->reslock); if (add_config->mask & (1 << VDPA_ATTR_DEV_NET_CFG_MACADDR)) { pfmdev = pci_get_drvdata(pci_physfn(mdev->pdev)); - err = mlx5_mpfs_add_mac(pfmdev, config->mac); - if (!err) + if (!is_zero_ether_addr(ndev->config.mac)) { + if (mlx5_mpfs_del_mac(pfmdev, ndev->config.mac)) { + mlx5_vdpa_warn(mvdev,"failed to delete old MAC %pM from MPFS table\n", + ndev->config.mac); + } + } + err = mlx5_mpfs_add_mac(pfmdev, (u8 *)add_config->net.mac); + if (!err) { + mac_vlan_del(ndev, config->mac, 0, false); ether_addr_copy(config->mac, add_config->net.mac); + } else { + mlx5_vdpa_warn(mvdev,"failed to add new MAC %pM to MPFS table\n", + (u8 *)add_config->net.mac); + up_write(&ndev->reslock); + return err; + } } + if (mac_vlan_add(ndev, ndev->config.mac, 0, false)) + mlx5_vdpa_warn(mvdev,"failed to add new MAC %pM to vlan table\n", + (u8 *)add_config->net.mac); up_write(&ndev->reslock); return err; -- 2.45.0

