iavf: remove INITIAL_MAC_SET to allow gARP to work properly
IAVF_FLAG_INITIAL_MAC_SET prevents waiting on iavf_is_mac_set_handled() the first time the MAC is set. This breaks gratuitous ARP because the MAC address has not been updated yet when the gARP packet is sent out. Current behaviour: $ echo 1 > /sys/class/net/ens4f0/device/sriov_numvfs iavf 0000:88:02.0: MAC address: ee:04:19:14:ec:ea $ ip addr add 192.168.1.1/24 dev ens4f0v0 $ ip link set dev ens4f0v0 up $ echo 1 > /proc/sys/net/ipv4/conf/ens4f0v0/arp_notify $ ip link set ens4f0v0 addr 00:11:22:33:44:55 07:23:41.676611 ee:04:19:14:ec:ea > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.1.1 tell 192.168.1.1, length 28 With IAVF_FLAG_INITIAL_MAC_SET removed: $ echo 1 > /sys/class/net/ens4f0/device/sriov_numvfs iavf 0000:88:02.0: MAC address: 3e:8a:16:a2:37:6d $ ip addr add 192.168.1.1/24 dev ens4f0v0 $ ip link set dev ens4f0v0 up $ echo 1 > /proc/sys/net/ipv4/conf/ens4f0v0/arp_notify $ ip link set ens4f0v0 addr 00:11:22:33:44:55 07:28:01.836608 00:11:22:33:44:55 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.1.1 tell 192.168.1.1, length 28 Fixes: 35a2443d0910 ("iavf: Add waiting for response from PF in set mac") Signed-off-by: Stefan Assmann <sassmann@kpanic.de> Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
08f1c147b7
commit
bb861c14f1
@ -298,7 +298,6 @@ struct iavf_adapter {
|
||||
#define IAVF_FLAG_QUEUES_DISABLED BIT(17)
|
||||
#define IAVF_FLAG_SETUP_NETDEV_FEATURES BIT(18)
|
||||
#define IAVF_FLAG_REINIT_MSIX_NEEDED BIT(20)
|
||||
#define IAVF_FLAG_INITIAL_MAC_SET BIT(23)
|
||||
/* duplicates for common code */
|
||||
#define IAVF_FLAG_DCB_ENABLED 0
|
||||
/* flags for admin queue service task */
|
||||
|
@ -1087,12 +1087,6 @@ static int iavf_set_mac(struct net_device *netdev, void *p)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* If this is an initial set MAC during VF spawn do not wait */
|
||||
if (adapter->flags & IAVF_FLAG_INITIAL_MAC_SET) {
|
||||
adapter->flags &= ~IAVF_FLAG_INITIAL_MAC_SET;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = wait_event_interruptible_timeout(adapter->vc_waitqueue,
|
||||
iavf_is_mac_set_handled(netdev, addr->sa_data),
|
||||
msecs_to_jiffies(2500));
|
||||
@ -2605,8 +2599,6 @@ static void iavf_init_config_adapter(struct iavf_adapter *adapter)
|
||||
ether_addr_copy(netdev->perm_addr, adapter->hw.mac.addr);
|
||||
}
|
||||
|
||||
adapter->flags |= IAVF_FLAG_INITIAL_MAC_SET;
|
||||
|
||||
adapter->tx_desc_count = IAVF_DEFAULT_TXD;
|
||||
adapter->rx_desc_count = IAVF_DEFAULT_RXD;
|
||||
err = iavf_init_interrupt_scheme(adapter);
|
||||
|
Loading…
x
Reference in New Issue
Block a user