|
@@ -1636,16 +1636,17 @@ static void ixgbe_set_multi(struct net_device *netdev)
|
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
|
struct dev_mc_list *mc_ptr;
|
|
|
u8 *mta_list;
|
|
|
- u32 fctrl;
|
|
|
+ u32 fctrl, vlnctrl;
|
|
|
int i;
|
|
|
|
|
|
/* Check for Promiscuous and All Multicast modes */
|
|
|
|
|
|
fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
|
|
|
+ vlnctrl = IXGBE_READ_REG(hw, IXGBE_VLNCTRL);
|
|
|
|
|
|
if (netdev->flags & IFF_PROMISC) {
|
|
|
fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
|
|
|
- fctrl &= ~IXGBE_VLNCTRL_VFE;
|
|
|
+ vlnctrl &= ~IXGBE_VLNCTRL_VFE;
|
|
|
} else {
|
|
|
if (netdev->flags & IFF_ALLMULTI) {
|
|
|
fctrl |= IXGBE_FCTRL_MPE;
|
|
@@ -1653,10 +1654,11 @@ static void ixgbe_set_multi(struct net_device *netdev)
|
|
|
} else {
|
|
|
fctrl &= ~(IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
|
|
|
}
|
|
|
- fctrl |= IXGBE_VLNCTRL_VFE;
|
|
|
+ vlnctrl |= IXGBE_VLNCTRL_VFE;
|
|
|
}
|
|
|
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
|
|
|
+ IXGBE_WRITE_REG(hw, IXGBE_VLNCTRL, vlnctrl);
|
|
|
|
|
|
if (netdev->mc_count) {
|
|
|
mta_list = kcalloc(netdev->mc_count, ETH_ALEN, GFP_ATOMIC);
|