summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2023-06-15 22:54:55 -0700
committerJakub Kicinski <kuba@kernel.org>2023-06-15 22:54:56 -0700
commit7deb0c3c24c474e0b79ea03f965b91c9cb1ba08f (patch)
tree537b64ce7dfc033d6961c43efa1f70b5710c206e
parent8f72fb1578a910571b3f25457e3b7855edfac6cf (diff)
parent96868cca7971a5a3887717fdacd44b281fb87cc9 (diff)
Merge branch 'optimize-procedure-of-changing-mac-address-on-interface'
Piotr Gardocki says: ==================== optimize procedure of changing MAC address on interface The first patch adds an if statement in core to skip early when the MAC address is not being changes. The remaining patches remove such checks from Intel drivers as they're redundant at this point. ==================== Link: https://lore.kernel.org/r/20230614145302.902301-1-piotrx.gardocki@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c6
-rw-r--r--drivers/net/ethernet/intel/ice/ice_main.c5
-rw-r--r--net/core/dev.c2
3 files changed, 2 insertions, 11 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index b847bd105b16..29ad1797adce 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -1788,12 +1788,6 @@ static int i40e_set_mac(struct net_device *netdev, void *p)
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
- if (ether_addr_equal(netdev->dev_addr, addr->sa_data)) {
- netdev_info(netdev, "already using mac address %pM\n",
- addr->sa_data);
- return 0;
- }
-
if (test_bit(__I40E_DOWN, pf->state) ||
test_bit(__I40E_RESET_RECOVERY_PENDING, pf->state))
return -EADDRNOTAVAIL;
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index a0283b5bf65f..65bf399a0efc 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -5624,11 +5624,6 @@ static int ice_set_mac_address(struct net_device *netdev, void *pi)
if (!is_valid_ether_addr(mac))
return -EADDRNOTAVAIL;
- if (ether_addr_equal(netdev->dev_addr, mac)) {
- netdev_dbg(netdev, "already using mac %pM\n", mac);
- return 0;
- }
-
if (test_bit(ICE_DOWN, pf->state) ||
ice_is_reset_in_progress(pf->state)) {
netdev_err(netdev, "can't set mac %pM. device not ready\n",
diff --git a/net/core/dev.c b/net/core/dev.c
index 63abb0463c24..e4ff0adf5523 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -8781,6 +8781,8 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
return -EINVAL;
if (!netif_device_present(dev))
return -ENODEV;
+ if (!memcmp(dev->dev_addr, sa->sa_data, dev->addr_len))
+ return 0;
err = dev_pre_changeaddr_notify(dev, sa->sa_data, extack);
if (err)
return err;