mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
synced 2025-10-24 22:35:08 +10:00
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: 35a2443d09 ("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…
Reference in New Issue
Block a user