i40e: don't free nonexistent rings
authorMitch Williams <mitch.a.williams@intel.com>
Sat, 28 Sep 2013 07:13:13 +0000 (07:13 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 22 Oct 2013 12:33:43 +0000 (05:33 -0700)
Not all VSIs have rings! Check to see if rings were actually allocated before
freeing them.

This prevents a panic when tx_rings[0] is not allocated.

Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Tested-by: Sibai Li <sibai.li@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_main.c

index 69ed801..a8c18fa 100644 (file)
@@ -5160,11 +5160,12 @@ static s32 i40e_vsi_clear_rings(struct i40e_vsi *vsi)
 {
        int i;
 
-       for (i = 0; i < vsi->alloc_queue_pairs; i++) {
-               kfree_rcu(vsi->tx_rings[i], rcu);
-               vsi->tx_rings[i] = NULL;
-               vsi->rx_rings[i] = NULL;
-       }
+       if (vsi->tx_rings[0])
+               for (i = 0; i < vsi->alloc_queue_pairs; i++) {
+                       kfree_rcu(vsi->tx_rings[i], rcu);
+                       vsi->tx_rings[i] = NULL;
+                       vsi->rx_rings[i] = NULL;
+               }
 
        return 0;
 }