diff options
Diffstat (limited to 'drivers/net/vmxnet3/vmxnet3_drv.c')
| -rw-r--r-- | drivers/net/vmxnet3/vmxnet3_drv.c | 34 | 
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 1cbacb38965..0959583feb2 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c @@ -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);  }  |