aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/igb
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2009-03-19 20:17:25 -0400
committerDavid S. Miller <davem@davemloft.net>2009-03-21 19:57:02 -0400
commitc5cd11e380002d24fd4fd4c0fc38f59ab394e885 (patch)
treee2d2f38c0dbfd10a4f839f58e4a1f6a282012c72 /drivers/net/igb
parent0e340485725ea35ca4e354cce5df09e86e31e20d (diff)
igb: rework igb_set_multi so that vfs are properly updated
Currently if there are no multicast addresses programmed into the PF then the VFs cannot have their multicast filters reset. This change makes it so the code path that updates vf multicast is always called along with the pf updates. 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')
-rw-r--r--drivers/net/igb/igb_main.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 4853a74843ec..d6dda1621166 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -2464,7 +2464,7 @@ static void igb_set_multi(struct net_device *netdev)
2464 struct e1000_hw *hw = &adapter->hw; 2464 struct e1000_hw *hw = &adapter->hw;
2465 struct e1000_mac_info *mac = &hw->mac; 2465 struct e1000_mac_info *mac = &hw->mac;
2466 struct dev_mc_list *mc_ptr; 2466 struct dev_mc_list *mc_ptr;
2467 u8 *mta_list; 2467 u8 *mta_list = NULL;
2468 u32 rctl; 2468 u32 rctl;
2469 int i; 2469 int i;
2470 2470
@@ -2485,17 +2485,15 @@ static void igb_set_multi(struct net_device *netdev)
2485 } 2485 }
2486 wr32(E1000_RCTL, rctl); 2486 wr32(E1000_RCTL, rctl);
2487 2487
2488 if (!netdev->mc_count) { 2488 if (netdev->mc_count) {
2489 /* nothing to program, so clear mc list */ 2489 mta_list = kzalloc(netdev->mc_count * 6, GFP_ATOMIC);
2490 igb_update_mc_addr_list(hw, NULL, 0, 1, 2490 if (!mta_list) {
2491 mac->rar_entry_count); 2491 dev_err(&adapter->pdev->dev,
2492 return; 2492 "failed to allocate multicast filter list\n");
2493 return;
2494 }
2493 } 2495 }
2494 2496
2495 mta_list = kzalloc(netdev->mc_count * 6, GFP_ATOMIC);
2496 if (!mta_list)
2497 return;
2498
2499 /* The shared function expects a packed array of only addresses. */ 2497 /* The shared function expects a packed array of only addresses. */
2500 mc_ptr = netdev->mc_list; 2498 mc_ptr = netdev->mc_list;
2501 2499