linux/drivers/net/ethernet/intel/igb
Stefan Assmann 52285b762b igb: release already assigned MSI-X interrupts if setup fails
During MSI-X setup the system might run out of vectors. If this happens the
already assigned vectors for this NIC should be freed before trying the
disable MSI-X. Failing to do so results in the following oops.

kernel BUG at drivers/pci/msi.c:341!
[...]
Call Trace:
 [<ffffffff8128f39d>] pci_disable_msix+0x3d/0x60
 [<ffffffffa037d1ce>] igb_reset_interrupt_capability+0x27/0x5c [igb]
 [<ffffffffa037d229>] igb_clear_interrupt_scheme+0x26/0x2d [igb]
 [<ffffffffa0384268>] igb_request_irq+0x73/0x297 [igb]
 [<ffffffffa0384554>] __igb_open+0xc8/0x223 [igb]
 [<ffffffffa0384815>] igb_open+0x13/0x15 [igb]
 [<ffffffff8144592f>] __dev_open+0xbf/0x120
 [<ffffffff81443e51>] __dev_change_flags+0xa1/0x180
 [<ffffffff81445828>] dev_change_flags+0x28/0x70
 [<ffffffff814af537>] devinet_ioctl+0x5b7/0x620
 [<ffffffff814b01c8>] inet_ioctl+0x88/0xa0
 [<ffffffff8142e8a0>] sock_do_ioctl+0x30/0x70
 [<ffffffff8142ecf2>] sock_ioctl+0x72/0x270
 [<ffffffff8118062c>] do_vfs_ioctl+0x8c/0x340
 [<ffffffff81180981>] sys_ioctl+0xa1/0xb0
 [<ffffffff815161a9>] system_call_fastpath+0x16/0x1b
Code: 48 89 df e8 1f 40 ed ff 4d 39 e6 49 8b 45 10 75 b6 48 83 c4 18 5b 41 5c 41 5d 41 5e 41 5f c9 c3 48 8b 7b 20 e8 3e 91 db ff eb ae <0f> 0b eb fe 0f 1f 84 00 00 00 00 00 55 48 89 e5 0f 1f 44 00 00
RIP  [<ffffffff8128e144>] free_msi_irqs+0x124/0x130
 RSP <ffff880037503bd8>

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2012-12-06 21:55:00 -08:00
..
e1000_82575.c igb: Fix SerDes autoneg flow control. 2012-12-01 03:30:20 -08:00
e1000_82575.h igb: Split igb_update_dca into separate Tx and Rx functions 2012-10-19 04:42:13 -07:00
e1000_defines.h igb: Fix SerDes autoneg flow control. 2012-12-01 03:30:20 -08:00
e1000_hw.h igb: Add Support for new i210/i211 devices. 2012-05-12 13:17:13 -07:00
e1000_i210.c igb: Refactoring of i210 file. 2012-12-01 03:04:12 -08:00
e1000_i210.h igb: Updates to read nvm function for i211 device 2012-12-01 02:41:39 -08:00
e1000_mac.c igb: Fix SerDes autoneg flow control. 2012-12-01 03:30:20 -08:00
e1000_mac.h igb: Add function to read i211's invm version 2012-11-01 02:35:52 -07:00
e1000_mbx.c igb: Update Copyright on all Intel copyrighted files. 2012-01-19 12:35:06 -05:00
e1000_mbx.h igb: Update Copyright on all Intel copyrighted files. 2012-01-19 12:35:06 -05:00
e1000_nvm.c igb: Acquire, release semaphore for writing each EEPROM page 2012-12-01 02:49:17 -08:00
e1000_nvm.h igb: Update firmware version info for ethtool output. 2012-10-29 23:49:29 -07:00
e1000_phy.c igb: Enable auto-crossover during forced operation on 82580 and above. 2012-10-29 23:49:11 -07:00
e1000_phy.h igb: Clear Go Link Disconnect for 82580 and later devices 2012-11-13 14:18:14 -05:00
e1000_regs.h igb: Support to enable EEE on all eee_supported devices 2012-09-20 02:47:12 -07:00
igb.h igb: Unset sigdetect for SERDES loopback on 82580 and i350 2012-12-01 03:20:40 -08:00
igb_ethtool.c igb: Unset sigdetect for SERDES loopback on 82580 and i350 2012-12-01 03:20:40 -08:00
igb_main.c igb: release already assigned MSI-X interrupts if setup fails 2012-12-06 21:55:00 -08:00
igb_ptp.c igb: Update PTP Rx filters 2012-11-22 02:00:53 -08:00
Makefile ptp: Enable clock drivers along with associated net/PHY drivers 2012-11-01 11:35:18 -04:00