igb: Use irq_synchronize per vector when using MSI-X
authorEmil Tantilov <emil.s.tantilov@intel.com>
Mon, 2 Aug 2010 14:40:52 +0000 (14:40 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 3 Aug 2010 04:20:22 +0000 (21:20 -0700)
Synchronize all IRQs when using MSI-X. Similar to ixgbe.
Issue was reported on e1000e, but the patch is also valid for igb.

CC: Jean Delvare <jdelvare@suse.de>
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/igb/igb_main.c

index 667b527b031292d4257e6d3bbe1306dc138d89cb..df5dcd23e4fcb408384c0991057305a23e41a4f7 100644 (file)
@@ -1290,7 +1290,13 @@ static void igb_irq_disable(struct igb_adapter *adapter)
        wr32(E1000_IAM, 0);
        wr32(E1000_IMC, ~0);
        wrfl();
-       synchronize_irq(adapter->pdev->irq);
+       if (adapter->msix_entries) {
+               int i;
+               for (i = 0; i < adapter->num_q_vectors; i++)
+                       synchronize_irq(adapter->msix_entries[i].vector);
+       } else {
+               synchronize_irq(adapter->pdev->irq);
+       }
 }
 
 /**