mirror of https://github.com/torvalds/linux.git
pci_get_device() decrements the reference count of "from" (last argument) so when we break off the loop successfully we have only one device reference - and we don't know which device we have. If we want a reference to each device, we must take them explicitly and let the pci_get_device() walk complete to avoid duplicate references. This is serious, as over-putting device references will cause the device to eventually disappear. Without this fix, the kernel crashes after a few insmod/rmmod cycles. Tested on an Intel S7000FC4UR system with a 7300 chipset. Signed-off-by: Jean Delvare <jdelvare@suse.de> Link: http://lkml.kernel.org/r/20140224111656.09bbb7ed@endymion.delvare Cc: Mauro Carvalho Chehab <m.chehab@samsung.com> Cc: Doug Thompson <dougthompson@xmission.com> Cc: stable@vger.kernel.org Signed-off-by: Borislav Petkov <bp@suse.de> |
||
|---|---|---|
| .. | ||
| Kconfig | ||
| Makefile | ||
| amd64_edac.c | ||
| amd64_edac.h | ||
| amd64_edac_dbg.c | ||
| amd64_edac_inj.c | ||
| amd76x_edac.c | ||
| amd8111_edac.c | ||
| amd8111_edac.h | ||
| amd8131_edac.c | ||
| amd8131_edac.h | ||
| cell_edac.c | ||
| cpc925_edac.c | ||
| e7xxx_edac.c | ||
| e752x_edac.c | ||
| edac_core.h | ||
| edac_device.c | ||
| edac_device_sysfs.c | ||
| edac_mc.c | ||
| edac_mc_sysfs.c | ||
| edac_module.c | ||
| edac_module.h | ||
| edac_pci.c | ||
| edac_pci_sysfs.c | ||
| edac_stub.c | ||
| ghes_edac.c | ||
| highbank_l2_edac.c | ||
| highbank_mc_edac.c | ||
| i7core_edac.c | ||
| i3000_edac.c | ||
| i3200_edac.c | ||
| i5000_edac.c | ||
| i5100_edac.c | ||
| i5400_edac.c | ||
| i7300_edac.c | ||
| i82443bxgx_edac.c | ||
| i82860_edac.c | ||
| i82875p_edac.c | ||
| i82975x_edac.c | ||
| mce_amd.c | ||
| mce_amd.h | ||
| mce_amd_inj.c | ||
| mpc85xx_edac.c | ||
| mpc85xx_edac.h | ||
| mv64x60_edac.c | ||
| mv64x60_edac.h | ||
| octeon_edac-l2c.c | ||
| octeon_edac-lmc.c | ||
| octeon_edac-pc.c | ||
| octeon_edac-pci.c | ||
| pasemi_edac.c | ||
| ppc4xx_edac.c | ||
| ppc4xx_edac.h | ||
| r82600_edac.c | ||
| sb_edac.c | ||
| tile_edac.c | ||
| x38_edac.c | ||