diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2009-03-13 16:41:37 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-03-14 15:41:03 -0400 |
commit | cad6d05f5676d879bb2a48154aea26cd81ebf1bb (patch) | |
tree | d44c60b143798c799a61bee96e9cf495f1e28b34 /drivers/net/igb/igb_main.c | |
parent | a2cf8b6ce17415fc84f51300fd6be372d95bfcea (diff) |
igb: add PF to pool
Add Pf to pool if adding a VLVF register value and the VFTA bit is
already set.
This patch addresses the unlikely situation that the PF adds a vlan
entry when the vlvf is full, and a vf later adds the vlan to the vlvf.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
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; |