mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 05:50:53 +07:00
vmxnet3: Don't enable vlan filters in promiscuous mode.
The vmxnet3 driver enables vlan filters if filtering is enabled for any vlan. In promiscuous mode the filter table is cleared to in order to disable filtering. However, if a vlan device is subsequently created that vlan will be added to the filter, re-engaging it. As a result, not only do we not see all the vlans in promiscuous mode, we don't even see vlans for which a filter was previously created. CC: Scott J. Goldman <scottjg@vmware.com> CC: Shreyas Bhatewara <sbhatewara@vmware.com> CC: VMware PV-Drivers <pv-drivers@vmware.com> Signed-off-by: Jesse Gross <jesse@nicira.com> Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7612bd8483
commit
f6957f88e5
@ -1929,14 +1929,17 @@ static void
|
||||
vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
|
||||
{
|
||||
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
|
||||
u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
|
||||
unsigned long flags;
|
||||
|
||||
VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
|
||||
spin_lock_irqsave(&adapter->cmd_lock, flags);
|
||||
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
|
||||
VMXNET3_CMD_UPDATE_VLAN_FILTERS);
|
||||
spin_unlock_irqrestore(&adapter->cmd_lock, flags);
|
||||
if (!(netdev->flags & IFF_PROMISC)) {
|
||||
u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
|
||||
unsigned long flags;
|
||||
|
||||
VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
|
||||
spin_lock_irqsave(&adapter->cmd_lock, flags);
|
||||
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
|
||||
VMXNET3_CMD_UPDATE_VLAN_FILTERS);
|
||||
spin_unlock_irqrestore(&adapter->cmd_lock, flags);
|
||||
}
|
||||
|
||||
set_bit(vid, adapter->active_vlans);
|
||||
}
|
||||
@ -1946,14 +1949,17 @@ static void
|
||||
vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
|
||||
{
|
||||
struct vmxnet3_adapter *adapter = netdev_priv(netdev);
|
||||
u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
|
||||
unsigned long flags;
|
||||
|
||||
VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid);
|
||||
spin_lock_irqsave(&adapter->cmd_lock, flags);
|
||||
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
|
||||
VMXNET3_CMD_UPDATE_VLAN_FILTERS);
|
||||
spin_unlock_irqrestore(&adapter->cmd_lock, flags);
|
||||
if (!(netdev->flags & IFF_PROMISC)) {
|
||||
u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
|
||||
unsigned long flags;
|
||||
|
||||
VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid);
|
||||
spin_lock_irqsave(&adapter->cmd_lock, flags);
|
||||
VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
|
||||
VMXNET3_CMD_UPDATE_VLAN_FILTERS);
|
||||
spin_unlock_irqrestore(&adapter->cmd_lock, flags);
|
||||
}
|
||||
|
||||
clear_bit(vid, adapter->active_vlans);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user