Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[safe/jmp/linux-2.6] / drivers / net / virtio_net.c
index 9ead30b..6b92e38 100644 (file)
@@ -674,6 +674,7 @@ static void virtnet_set_rx_mode(struct net_device *dev)
        struct virtio_net_ctrl_mac *mac_data;
        struct dev_addr_list *addr;
        struct netdev_hw_addr *ha;
+       int uc_count;
        void *buf;
        int i;
 
@@ -700,8 +701,9 @@ static void virtnet_set_rx_mode(struct net_device *dev)
                dev_warn(&dev->dev, "Failed to %sable allmulti mode.\n",
                         allmulti ? "en" : "dis");
 
+       uc_count = netdev_uc_count(dev);
        /* MAC filter - use one buffer for both lists */
-       mac_data = buf = kzalloc(((dev->uc.count + dev->mc_count) * ETH_ALEN) +
+       mac_data = buf = kzalloc(((uc_count + dev->mc_count) * ETH_ALEN) +
                                 (2 * sizeof(mac_data->entries)), GFP_ATOMIC);
        if (!buf) {
                dev_warn(&dev->dev, "No memory for MAC address buffer\n");
@@ -711,16 +713,16 @@ static void virtnet_set_rx_mode(struct net_device *dev)
        sg_init_table(sg, 2);
 
        /* Store the unicast list and count in the front of the buffer */
-       mac_data->entries = dev->uc.count;
+       mac_data->entries = uc_count;
        i = 0;
-       list_for_each_entry(ha, &dev->uc.list, list)
+       netdev_for_each_uc_addr(ha, dev)
                memcpy(&mac_data->macs[i++][0], ha->addr, ETH_ALEN);
 
        sg_set_buf(&sg[0], mac_data,
-                  sizeof(mac_data->entries) + (dev->uc.count * ETH_ALEN));
+                  sizeof(mac_data->entries) + (uc_count * ETH_ALEN));
 
        /* multicast list and count fill the end */
-       mac_data = (void *)&mac_data->macs[dev->uc.count][0];
+       mac_data = (void *)&mac_data->macs[uc_count][0];
 
        mac_data->entries = dev->mc_count;
        addr = dev->mc_list;