linux/drivers/net/ethernet
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
..
3com 3com: make 3c59x depend on HAS_IOPORT 2012-12-05 15:36:35 -05:00
8390 8390: remove __dev* attributes 2012-12-03 11:16:32 -08:00
adaptec starfire: remove __dev* attributes 2012-12-03 11:16:41 -08:00
adi bfin_mac: remove __dev* attributes 2012-12-03 11:16:41 -08:00
aeroflex aeroflex: remove __dev* attributes 2012-12-03 11:16:41 -08:00
alteon acenic: remove __dev* attributes 2012-12-03 11:16:38 -08:00
amd net/amd: remove __dev* attributes 2012-12-03 11:16:54 -08:00
apple net/apple: remove __dev* attributes 2012-12-03 11:16:54 -08:00
atheros net/atheros: remove __dev* attributes 2012-12-03 11:16:54 -08:00
broadcom cnic: Fix rare race condition during iSCSI disconnect. 2012-12-05 16:01:28 -05:00
brocade bna: remove __dev* attributes 2012-12-03 11:16:42 -08:00
cadence net/cadence: remove __dev* attributes 2012-12-03 11:16:54 -08:00
calxeda net: calxedaxgmac: ip align receive buffers 2012-11-07 03:51:14 -05:00
chelsio chelsio: remove __dev* attributes 2012-12-03 11:16:42 -08:00
cirrus cs89x0 : packet reception not working 2012-08-31 15:48:56 -04:00
cisco enic: remove __dev* attributes 2012-12-03 11:16:42 -08:00
davicom dm9000: remove __dev* attributes 2012-12-03 11:16:42 -08:00
dec tulip: remove __dev* attributes 2012-12-03 11:16:52 -08:00
dlink Networking: Remove __dev* markings from the networking drivers 2012-12-03 15:35:28 -05:00
emulex be2net: remove __dev* attributes 2012-12-03 11:16:43 -08:00
faraday net: ftgmac100/ftmac100: dont pull too much data 2012-07-18 09:40:53 -07:00
freescale net/freescale: remove __dev* attributes 2012-12-03 11:16:54 -08:00
fujitsu drivers/net: delete all code/drivers depending on CONFIG_MCA 2012-05-17 16:37:41 -04:00
hp hp100: remove __dev* attributes 2012-12-03 11:16:43 -08:00
i825xx i825xx: remove __dev* attributes 2012-12-03 11:16:12 -08:00
ibm ibm/emac: remove __dev* attributes 2012-12-03 11:16:43 -08:00
icplus icplus: remove __dev* attributes 2012-12-03 11:16:54 -08:00
intel igb: release already assigned MSI-X interrupts if setup fails 2012-12-06 21:55:00 -08:00
marvell Networking: Remove __dev* markings from the networking drivers 2012-12-03 15:35:28 -05:00
mellanox mlx4_core: remove __dev* attributes 2012-12-03 11:16:44 -08:00
micrel net/micrel: remove __dev* attributes 2012-12-03 11:16:54 -08:00
microchip enc28j60: remove __dev* attributes 2012-12-03 11:16:44 -08:00
myricom myri10ge: fix most sparse warnings 2012-12-05 16:01:27 -05:00
natsemi natsemi: remove __dev* attributes 2012-12-03 11:16:44 -08:00
neterion net: neterion: use for_each_pci_dev to simplify the code 2012-12-04 13:19:40 -05:00
nuvoton nuvoton: remove __dev* attributes 2012-12-03 11:16:44 -08:00
nvidia forcedeth: remove __dev* attributes 2012-12-03 11:16:44 -08:00
nxp lpc_eth: remove __dev* attributes 2012-12-03 11:16:44 -08:00
octeon net/octeon_mgmt: remove __dev* attributes 2012-12-03 11:16:45 -08:00
oki-semi pch_gbe, ptp_pch: Fix the dependency direction between these drivers 2012-11-17 22:11:45 -05:00
packetengines packetengines: remove __dev* attributes 2012-12-03 11:16:45 -08:00
pasemi net/pasemi: remove __dev* attributes 2012-12-03 11:16:55 -08:00
qlogic qlcnic: rename module params with module_param_named 2012-12-04 13:00:12 -05:00
racal
rdc r6040: remove __dev* attributes 2012-12-03 11:16:46 -08:00
realtek Networking: Remove __dev* markings from the networking drivers 2012-12-03 15:35:28 -05:00
renesas net: sh_eth: Fix a typo - replace regist with register. 2012-11-03 15:37:35 -04:00
seeq seeq: remove __dev* attributes 2012-12-03 11:16:46 -08:00
sfc sfc: remove __dev* attributes 2012-12-03 11:16:46 -08:00
sgi net/sgi: remove __dev* attributes 2012-12-03 11:16:55 -08:00
silan sc92031: remove __dev* attributes 2012-12-03 11:16:46 -08:00
sis sis900: remove __dev* attributes 2012-12-03 11:16:51 -08:00
smsc epic100: remove __dev* attributes 2012-12-03 11:16:52 -08:00
stmicro Networking: Remove __dev* markings from the networking drivers 2012-12-03 15:35:28 -05:00
sun net/sun: remove __dev* attributes 2012-12-03 11:16:55 -08:00
tehuti tehuti: remove __dev* attributes 2012-12-03 11:16:53 -08:00
ti net/davinci_emac: remove __dev* attributes 2012-12-03 11:16:55 -08:00
tile tilegx: request_irq with a non-null device name 2012-11-16 01:40:41 -05:00
toshiba net/ps3_gelic_wireless: remove __dev* attributes 2012-12-03 11:16:55 -08:00
tundra drivers/net/ethernet/tundra/tsi108_eth.c: delete double assignment 2012-08-30 13:08:37 -04:00
via via-velocity: remove __dev* attributes 2012-12-03 11:16:53 -08:00
wiznet net/wiznet: remove __dev* attributes 2012-12-03 11:16:56 -08:00
xilinx net/xilinx: remove __dev* attributes 2012-12-03 11:16:56 -08:00
xircom
xscale ixp4xx_eth: remove __dev* attributes 2012-12-03 11:16:53 -08:00
dnet.c net/ethernet: remove __dev* attributes 2012-12-03 11:16:56 -08:00
dnet.h
ethoc.c net/ethernet: remove __dev* attributes 2012-12-03 11:16:56 -08:00
fealnx.c net/ethernet: remove __dev* attributes 2012-12-03 11:16:56 -08:00
jme.c jme: remove __dev* attributes 2012-12-03 11:16:54 -08:00
jme.h
Kconfig net: mipsnet: Remove the MIPSsim Ethernet driver. 2012-09-24 16:47:23 -04:00
korina.c
lantiq_etop.c net/ethernet: remove __dev* attributes 2012-12-03 11:16:56 -08:00
Makefile net: mipsnet: Remove the MIPSsim Ethernet driver. 2012-09-24 16:47:23 -04:00
netx-eth.c ARM: netx: move platform_data definitions 2012-09-14 11:17:36 +02:00
s6gmac.c net/ethernet: remove __dev* attributes 2012-12-03 11:16:56 -08:00