[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251105080151.1115698-2-lulu@redhat.com>
Date: Wed, 5 Nov 2025 16:01:42 +0800
From: Cindy Lu <lulu@...hat.com>
To: lulu@...hat.com,
dtatulea@...dia.com,
mst@...hat.com,
jasowang@...hat.com,
netdev@...r.kernel.org,
virtualization@...ts.linux-foundation.org,
linux-kernel@...r.kernel.org
Subject: [PATCH 2/2] vdpa/mlx5: update MAC address handling in mlx5_vdpa_set_attr()
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 <lulu@...hat.com>
---
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
Powered by blists - more mailing lists