mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-17 22:56:47 +07:00
fm10k: don't assume VLAN 1 is enabled
Since commit 856dfd69e84f ("fm10k: Fix multicast mode synch issues", 2016-03-03) we've incorrectly assumed that VLAN 1 is enabled when the default VID is not set. This occurs because we check the default_vid and if it's zero, start several loops over the active_vlans bitmask at 1, instead of checking to ensure that that bit is active. This happened because of commit d9ff3ee8efe9 ("fm10k: Add support for VLAN 0 w/o default VLAN", 2014-08-07) which mistakenly assumed that we should send requests for MAC and VLAN filters with VLAN 0 when the default_vid isn't set. However, the switch generally considers this an invalid configuration, so the only time we'd have a default_vid of 0 is when the switch is down. Instead, lets just not request any filters for the default_vid if it's not yet been assigned. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Tested-by: Krishneil Singh <krishneil.k.singh@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
8c2c503907
commit
74d2950c80
@ -1050,14 +1050,13 @@ static int __fm10k_uc_sync(struct net_device *dev,
|
||||
const unsigned char *addr, bool sync)
|
||||
{
|
||||
struct fm10k_intfc *interface = netdev_priv(dev);
|
||||
struct fm10k_hw *hw = &interface->hw;
|
||||
u16 vid, glort = interface->glort;
|
||||
s32 err;
|
||||
|
||||
if (!is_valid_ether_addr(addr))
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
for (vid = hw->mac.default_vid ? fm10k_find_next_vlan(interface, 0) : 1;
|
||||
for (vid = fm10k_find_next_vlan(interface, 0);
|
||||
vid < VLAN_N_VID;
|
||||
vid = fm10k_find_next_vlan(interface, vid)) {
|
||||
err = fm10k_queue_mac_request(interface, glort,
|
||||
@ -1116,14 +1115,13 @@ static int __fm10k_mc_sync(struct net_device *dev,
|
||||
const unsigned char *addr, bool sync)
|
||||
{
|
||||
struct fm10k_intfc *interface = netdev_priv(dev);
|
||||
struct fm10k_hw *hw = &interface->hw;
|
||||
u16 vid, glort = interface->glort;
|
||||
s32 err;
|
||||
|
||||
if (!is_multicast_ether_addr(addr))
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
for (vid = hw->mac.default_vid ? fm10k_find_next_vlan(interface, 0) : 1;
|
||||
for (vid = fm10k_find_next_vlan(interface, 0);
|
||||
vid < VLAN_N_VID;
|
||||
vid = fm10k_find_next_vlan(interface, vid)) {
|
||||
err = fm10k_queue_mac_request(interface, glort,
|
||||
@ -1223,7 +1221,7 @@ void fm10k_restore_rx_state(struct fm10k_intfc *interface)
|
||||
xcast_mode == FM10K_XCAST_MODE_PROMISC);
|
||||
|
||||
/* update table with current entries */
|
||||
for (vid = hw->mac.default_vid ? fm10k_find_next_vlan(interface, 0) : 1;
|
||||
for (vid = fm10k_find_next_vlan(interface, 0);
|
||||
vid < VLAN_N_VID;
|
||||
vid = fm10k_find_next_vlan(interface, vid)) {
|
||||
fm10k_queue_vlan_request(interface, vid, 0, true);
|
||||
|
Loading…
Reference in New Issue
Block a user