diff options
-rw-r--r-- | drivers/net/e1000e/netdev.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index ffa37c682a00..88d54d3efcef 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -2589,21 +2589,16 @@ static void e1000_set_multi(struct net_device *netdev) | |||
2589 | 2589 | ||
2590 | ew32(RCTL, rctl); | 2590 | ew32(RCTL, rctl); |
2591 | 2591 | ||
2592 | if (netdev->mc_count) { | 2592 | if (!netdev_mc_empty(netdev)) { |
2593 | mta_list = kmalloc(netdev->mc_count * 6, GFP_ATOMIC); | 2593 | mta_list = kmalloc(netdev_mc_count(netdev) * 6, GFP_ATOMIC); |
2594 | if (!mta_list) | 2594 | if (!mta_list) |
2595 | return; | 2595 | return; |
2596 | 2596 | ||
2597 | /* prepare a packed array of only addresses. */ | 2597 | /* prepare a packed array of only addresses. */ |
2598 | mc_ptr = netdev->mc_list; | 2598 | i = 0; |
2599 | 2599 | netdev_for_each_mc_addr(mc_ptr, netdev) | |
2600 | for (i = 0; i < netdev->mc_count; i++) { | 2600 | memcpy(mta_list + (i++ * ETH_ALEN), |
2601 | if (!mc_ptr) | 2601 | mc_ptr->dmi_addr, ETH_ALEN); |
2602 | break; | ||
2603 | memcpy(mta_list + (i*ETH_ALEN), mc_ptr->dmi_addr, | ||
2604 | ETH_ALEN); | ||
2605 | mc_ptr = mc_ptr->next; | ||
2606 | } | ||
2607 | 2602 | ||
2608 | e1000_update_mc_addr_list(hw, mta_list, i); | 2603 | e1000_update_mc_addr_list(hw, mta_list, i); |
2609 | kfree(mta_list); | 2604 | kfree(mta_list); |