iavf: allow permanent MAC address to change
authorMitch Williams <mitch.a.williams@intel.com>
Thu, 25 Jul 2019 09:47:43 +0000 (05:47 -0400)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 9 Sep 2019 17:08:38 +0000 (10:08 -0700)
Allow the VF to override the "permanent" MAC address set by the host.
This allows bonding to work in the case where the administrator has set
the VF MAC.

Note that the VF must still be set to Trusted on the host if this change
is to be accepted by the PF driver.

Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/iavf/iavf.h
drivers/net/ethernet/intel/iavf/iavf_main.c

index 9fc635d816d26d5815657806b36ecd69765826c3..29de3ae96ef222d7545abead8c9004bacb312561 100644 (file)
@@ -253,7 +253,6 @@ struct iavf_adapter {
 #define IAVF_FLAG_RESET_PENDING                BIT(4)
 #define IAVF_FLAG_RESET_NEEDED         BIT(5)
 #define IAVF_FLAG_WB_ON_ITR_CAPABLE            BIT(6)
-#define IAVF_FLAG_ADDR_SET_BY_PF               BIT(8)
 #define IAVF_FLAG_SERVICE_CLIENT_REQUESTED     BIT(9)
 #define IAVF_FLAG_CLIENT_NEEDS_OPEN            BIT(10)
 #define IAVF_FLAG_CLIENT_NEEDS_CLOSE           BIT(11)
index 554aa619ff021d1bebab9765b7308ff44d8aefc0..07f5541a0f01380a0933814e0724623ef4013a5b 100644 (file)
@@ -790,9 +790,6 @@ static int iavf_set_mac(struct net_device *netdev, void *p)
        if (ether_addr_equal(netdev->dev_addr, addr->sa_data))
                return 0;
 
-       if (adapter->flags & IAVF_FLAG_ADDR_SET_BY_PF)
-               return -EPERM;
-
        spin_lock_bh(&adapter->mac_vlan_list_lock);
 
        f = iavf_find_filter(adapter, hw->mac.addr);
@@ -1811,7 +1808,6 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter)
                eth_hw_addr_random(netdev);
                ether_addr_copy(adapter->hw.mac.addr, netdev->dev_addr);
        } else {
-               adapter->flags |= IAVF_FLAG_ADDR_SET_BY_PF;
                ether_addr_copy(netdev->dev_addr, adapter->hw.mac.addr);
                ether_addr_copy(netdev->perm_addr, adapter->hw.mac.addr);
        }