linux/drivers/acpi
Alex Chiang 72800360fd PCI: pci_slot: grab refcount on slot's bus
If a logical hot unplug (remove) is performed on a physical PCI slot's
parent bridge, and then pci_slot is unloaded, we will encounter an oops:

  [<ffffffff803a788a>] kobject_release+0x9a/0x290
  [<ffffffff803a77f0>] ? kobject_release+0x0/0x290
  [<ffffffff803a8ce7>] kref_put+0x37/0x80
  [<ffffffff803a76f7>] kobject_put+0x27/0x60
  [<ffffffff803bebcc>] ? pci_destroy_slot+0x3c/0xc0
  [<ffffffff803bebd5>] pci_destroy_slot+0x45/0xc0
  [<ffffffffa000f05c>] acpi_pci_slot_remove+0x5c/0x91 [pci_slot]
  [<ffffffff8040064b>] acpi_pci_unregister_driver+0x4b/0x62
  [<ffffffffa000f5c8>] acpi_pci_slot_exit+0x10/0x12 [pci_slot]
  [<ffffffff80276ce1>] sys_delete_module+0x161/0x250

We need to grab a reference to the parent PCI bus, which will pin
the bus and prevent it from being released until pci_slot is unloaded.

Cc: lenb@kernel.org
Reviewed-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Tested-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Reported-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2009-04-06 11:31:14 -07:00
..
acpica Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
ac.c proc 2/2: remove struct proc_dir_entry::owner 2009-03-31 01:14:44 +04:00
acpi_memhotplug.c trivial: Fix misspelling of "firmware" in acpi_memhotplug.c 2009-01-06 11:28:08 +01:00
battery.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
blacklist.c ACPI: delete OSI(Linux) DMI dmesg spam 2008-11-27 01:55:21 -05:00
bus.c Merge branch 'bjorn-initcall-cleanup' into release 2009-04-05 01:38:31 -04:00
button.c ACPI: button: use .notify method instead of installing handler directly 2009-04-05 02:25:07 -04:00
cm_sbs.c ACPI: remove private acpica headers from driver files 2008-12-31 01:15:22 -05:00
container.c ACPI: add missing KERN_* constants to printks 2009-02-07 00:29:32 -05:00
debug.c Merge branch 'acpi-modparam' into release 2009-04-05 01:45:50 -04:00
dock.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
ec.c Merge branch 'constify' into release 2009-04-05 01:51:16 -04:00
event.c netlink: change return-value logic of netlink_broadcast() 2009-02-05 23:56:36 -08:00
fan.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
glue.c ACPI: call init_acpi_device_notify() explicitly rather than as initcall 2009-03-27 12:51:16 -04:00
internal.h ACPI: call acpi_wakeup_device_init() explicitly rather than as initcall 2009-03-27 12:51:31 -04:00
Kconfig ACPI: update Kconfig help texts (no functional changes) 2009-03-17 02:06:04 -04:00
Makefile Merge branch 'async-battery' into release 2009-04-05 01:48:46 -04:00
numa.c x86, ACPI: add support for x2apic ACPI extensions 2009-04-03 20:08:12 -04:00
osl.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
pci_bind.c ACPI: simplify buffer management for acpi_pci_bind() etc. 2008-12-30 22:52:26 -05:00
pci_irq.c Merge branch 'misc' into release 2009-04-05 01:52:07 -04:00
pci_link.c ACPI: pci_link: simplify list of link devices 2009-03-17 01:53:29 -04:00
pci_root.c PCI/ACPI: rename pci_osc_control_set() 2009-03-19 19:29:33 -07:00
pci_slot.c PCI: pci_slot: grab refcount on slot's bus 2009-04-06 11:31:14 -07:00
power.c Merge branch 'acpi-modparam' into release 2009-04-05 01:45:50 -04:00
proc.c ACPI: call acpi_sleep_proc_init() explicitly rather than as initcall 2009-03-27 12:51:23 -04:00
processor_core.c ACPI: processor: use .notify method instead of installing handler directly 2009-04-05 02:25:07 -04:00
processor_idle.c Merge branch 'pmtimer-overflow' into release 2009-04-05 01:39:07 -04:00
processor_perflib.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
processor_thermal.c Merge branch 'constify' into release 2009-04-05 01:51:16 -04:00
processor_throttling.c Merge branch 'misc' into release 2009-04-05 01:52:07 -04:00
reboot.c ACPI: reboot.c: use new acpi_reset interface 2008-12-31 01:15:00 -05:00
sbs.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
sbshc.c ACPI: remove private acpica headers from driver files 2008-12-31 01:15:22 -05:00
sbshc.h ACPI: SBS: Ignore alarms coming from unknown devices 2007-12-14 15:14:06 -05:00
scan.c ACPI: support acpi_device_ops .notify methods 2009-04-05 02:25:07 -04:00
sleep.c Merge branch 'misc' into release 2009-04-05 01:52:07 -04:00
sleep.h ACPICA: create acpica/ directory 2009-01-09 03:30:47 -05:00
system.c Merge branch 'acpi-modparam' into release 2009-04-05 01:45:50 -04:00
tables.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
thermal.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
utils.c ACPI: scheduling in atomic via acpi_evaluate_integer () 2008-11-26 17:39:06 -05:00
video_detect.c ACPI video: add a warning message if _BQC is not found 2009-03-27 22:37:22 -04:00
video.c Merge branch 'linus' into release 2009-04-05 02:14:15 -04:00
wakeup.c ACPI: call acpi_wakeup_device_init() explicitly rather than as initcall 2009-03-27 12:51:31 -04:00