Merge branch 'for-next' into for-linus
[safe/jmp/linux-2.6] / drivers / net / igb / igb_main.c
index a9f4e02..0ed25f0 100644 (file)
@@ -649,6 +649,8 @@ static void igb_free_q_vectors(struct igb_adapter *adapter)
        for (v_idx = 0; v_idx < adapter->num_q_vectors; v_idx++) {
                struct igb_q_vector *q_vector = adapter->q_vector[v_idx];
                adapter->q_vector[v_idx] = NULL;
+               if (!q_vector)
+                       continue;
                netif_napi_del(&q_vector->napi);
                kfree(q_vector);
        }
@@ -686,7 +688,7 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter)
        /* start with one vector for every rx queue */
        numvecs = adapter->num_rx_queues;
 
-       /* if tx handler is seperate add 1 for every tx queue */
+       /* if tx handler is separate add 1 for every tx queue */
        if (!(adapter->flags & IGB_FLAG_QUEUE_PAIRS))
                numvecs += adapter->num_tx_queues;
 
@@ -768,13 +770,7 @@ static int igb_alloc_q_vectors(struct igb_adapter *adapter)
        return 0;
 
 err_out:
-       while (v_idx) {
-               v_idx--;
-               q_vector = adapter->q_vector[v_idx];
-               netif_napi_del(&q_vector->napi);
-               kfree(q_vector);
-               adapter->q_vector[v_idx] = NULL;
-       }
+       igb_free_q_vectors(adapter);
        return -ENOMEM;
 }
 
@@ -2881,7 +2877,7 @@ static int igb_write_mc_addr_list(struct net_device *netdev)
 {
        struct igb_adapter *adapter = netdev_priv(netdev);
        struct e1000_hw *hw = &adapter->hw;
-       struct dev_mc_list *mc_ptr = netdev->mc_list;
+       struct dev_mc_list *mc_ptr;
        u8  *mta_list;
        int i;
 
@@ -2897,14 +2893,10 @@ static int igb_write_mc_addr_list(struct net_device *netdev)
                return -ENOMEM;
 
        /* The shared function expects a packed array of only addresses. */
-       mc_ptr = netdev->mc_list;
+       i = 0;
+       netdev_for_each_mc_addr(mc_ptr, netdev)
+               memcpy(mta_list + (i++ * ETH_ALEN), mc_ptr->dmi_addr, ETH_ALEN);
 
-       for (i = 0; i < netdev_mc_count(netdev); i++) {
-               if (!mc_ptr)
-                       break;
-               memcpy(mta_list + (i*ETH_ALEN), mc_ptr->dmi_addr, ETH_ALEN);
-               mc_ptr = mc_ptr->next;
-       }
        igb_update_mc_addr_list(hw, mta_list, i);
        kfree(mta_list);
 
@@ -3651,14 +3643,12 @@ dma_error:
        buffer_info->length = 0;
        buffer_info->next_to_watch = 0;
        buffer_info->mapped_as_page = false;
-       count--;
 
        /* clear timestamp and dma mappings for remaining portion of packet */
-       while (count >= 0) {
-               count--;
+       while (count--) {
+               if (i == 0)
+                       i = tx_ring->count;
                i--;
-               if (i < 0)
-                       i += tx_ring->count;
                buffer_info = &tx_ring->buffer_info[i];
                igb_unmap_and_free_tx_resource(tx_ring, buffer_info);
        }