aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorEmil Tantilov <emil.s.tantilov@intel.com>2013-10-26 04:13:20 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2013-11-01 09:27:38 -0400
commitcf78959c0d7afbde31498afc4212294c28e2c278 (patch)
tree70b684b1ad66a8b88364689edfdcc0dbf6b590fc /drivers/net/ethernet
parentf880d07bc5bc9f453be7b1fc9c1a34853719d148 (diff)
ixgbe: fix inconsistent clearing of the multicast table
This patch resolves an issue where the MTA table can be cleared when the interface is reset while in promisc mode. As result IPv6 traffic between VFs will be interrupted. This patch makes the update of the MTA table unconditional to avoid the inconsistent clearing on reset. Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index a7d1a1c43f12..5191b3ca9a26 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -3823,14 +3823,6 @@ void ixgbe_set_rx_mode(struct net_device *netdev)
3823 if (netdev->flags & IFF_ALLMULTI) { 3823 if (netdev->flags & IFF_ALLMULTI) {
3824 fctrl |= IXGBE_FCTRL_MPE; 3824 fctrl |= IXGBE_FCTRL_MPE;
3825 vmolr |= IXGBE_VMOLR_MPE; 3825 vmolr |= IXGBE_VMOLR_MPE;
3826 } else {
3827 /*
3828 * Write addresses to the MTA, if the attempt fails
3829 * then we should just turn on promiscuous mode so
3830 * that we can at least receive multicast traffic
3831 */
3832 hw->mac.ops.update_mc_addr_list(hw, netdev);
3833 vmolr |= IXGBE_VMOLR_ROMPE;
3834 } 3826 }
3835 ixgbe_vlan_filter_enable(adapter); 3827 ixgbe_vlan_filter_enable(adapter);
3836 hw->addr_ctrl.user_set_promisc = false; 3828 hw->addr_ctrl.user_set_promisc = false;
@@ -3847,6 +3839,13 @@ void ixgbe_set_rx_mode(struct net_device *netdev)
3847 vmolr |= IXGBE_VMOLR_ROPE; 3839 vmolr |= IXGBE_VMOLR_ROPE;
3848 } 3840 }
3849 3841
3842 /* Write addresses to the MTA, if the attempt fails
3843 * then we should just turn on promiscuous mode so
3844 * that we can at least receive multicast traffic
3845 */
3846 hw->mac.ops.update_mc_addr_list(hw, netdev);
3847 vmolr |= IXGBE_VMOLR_ROMPE;
3848
3850 if (adapter->num_vfs) 3849 if (adapter->num_vfs)
3851 ixgbe_restore_vf_multicasts(adapter); 3850 ixgbe_restore_vf_multicasts(adapter);
3852 3851