diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2010-09-22 17:56:20 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-09-22 21:20:03 -0700 |
commit | d85b9004bc2047d79248b167cc151ff9a4b509c3 (patch) | |
tree | b507aff12a94c51e48e0bca5eaa21ab5c82e6b50 /drivers/net/igb | |
parent | 768190fdc058cc7405330f7782782df084c25d61 (diff) | |
download | linux-d85b9004bc2047d79248b167cc151ff9a4b509c3.tar.gz linux-d85b9004bc2047d79248b167cc151ff9a4b509c3.tar.bz2 linux-d85b9004bc2047d79248b167cc151ff9a4b509c3.zip |
igb: clear VF_PROMISC bits instead of setting all other bits
This change corrects an issue in which we were setting all flag bits except
for promisc instead of clearing the promisc bits due to the incorrect use
of an |= instead of an &=.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@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')
-rw-r--r-- | drivers/net/igb/igb_main.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index c4d861b557ca..fd922e7db1d5 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c @@ -4659,12 +4659,13 @@ static int igb_set_vf_promisc(struct igb_adapter *adapter, u32 *msgbuf, u32 vf) u32 vmolr = rd32(E1000_VMOLR(vf)); struct vf_data_storage *vf_data = &adapter->vf_data[vf]; - vf_data->flags |= ~(IGB_VF_FLAG_UNI_PROMISC | + vf_data->flags &= ~(IGB_VF_FLAG_UNI_PROMISC | IGB_VF_FLAG_MULTI_PROMISC); vmolr &= ~(E1000_VMOLR_ROPE | E1000_VMOLR_ROMPE | E1000_VMOLR_MPME); if (*msgbuf & E1000_VF_SET_PROMISC_MULTICAST) { vmolr |= E1000_VMOLR_MPME; + vf_data->flags |= IGB_VF_FLAG_MULTI_PROMISC; *msgbuf &= ~E1000_VF_SET_PROMISC_MULTICAST; } else { /* |