diff options
Diffstat (limited to 'drivers/net/igb/igb_main.c')
-rw-r--r-- | drivers/net/igb/igb_main.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index f0c3a01452c8..a3c2f83fb495 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
@@ -3895,10 +3895,15 @@ static s32 igb_vlvf_set(struct igb_adapter *adapter, u32 vid, bool add, u32 vf) | |||
3895 | 3895 | ||
3896 | /* if !enabled we need to set this up in vfta */ | 3896 | /* if !enabled we need to set this up in vfta */ |
3897 | if (!(reg & E1000_VLVF_VLANID_ENABLE)) { | 3897 | if (!(reg & E1000_VLVF_VLANID_ENABLE)) { |
3898 | /* add VID to filter table */ | 3898 | /* add VID to filter table, if bit already set |
3899 | igb_vfta_set(hw, vid, true); | 3899 | * PF must have added it outside of table */ |
3900 | if (igb_vfta_set(hw, vid, true)) | ||
3901 | reg |= 1 << (E1000_VLVF_POOLSEL_SHIFT + | ||
3902 | adapter->vfs_allocated_count); | ||
3900 | reg |= E1000_VLVF_VLANID_ENABLE; | 3903 | reg |= E1000_VLVF_VLANID_ENABLE; |
3901 | } | 3904 | } |
3905 | reg &= ~E1000_VLVF_VLANID_MASK; | ||
3906 | reg |= vid; | ||
3902 | 3907 | ||
3903 | wr32(E1000_VLVF(i), reg); | 3908 | wr32(E1000_VLVF(i), reg); |
3904 | return 0; | 3909 | return 0; |