ixgbe: balance free_irq calls with request_irq calls
authorAlexander Duyck <alexander.h.duyck@intel.com>
Tue, 15 Feb 2011 02:12:05 +0000 (02:12 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 3 Mar 2011 10:55:56 +0000 (02:55 -0800)
We were incorrectly freeing IRQs that we had not requested.  This change
corrects that by making certain we only free q_vectors that we have
requested IRQs for.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Tested-by: Stephen Ko <stephen.s.ko@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ixgbe/ixgbe_main.c

index f0d0c5aad2b477134f41d3799900cf4f68c9fdd1..588661ba2b9ba3f872a7183eaa38f16aaf305bcb 100644 (file)
@@ -2597,6 +2597,11 @@ static void ixgbe_free_irq(struct ixgbe_adapter *adapter)
 
                i--;
                for (; i >= 0; i--) {
+                       /* free only the irqs that were actually requested */
+                       if (!adapter->q_vector[i]->rxr_count &&
+                           !adapter->q_vector[i]->txr_count)
+                               continue;
+
                        free_irq(adapter->msix_entries[i].vector,
                                 adapter->q_vector[i]);
                }