1
linux/drivers
Stefan Richter 855c603d61 firewire: fix crash in automatic module unloading
"modprobe firewire-ohci; sleep .1; modprobe -r firewire-ohci" used to
result in crashes like this:

    BUG: unable to handle kernel paging request at ffffffff8807b455
    IP: [<ffffffff8807b455>]
    PGD 203067 PUD 207063 PMD 7c170067 PTE 0
    Oops: 0010 [1] PREEMPT SMP
    CPU 0
    Modules linked in: i915 drm cpufreq_ondemand acpi_cpufreq freq_table applesmc input_polldev led_class coretemp hwmon eeprom snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss button thermal processor sg snd_hda_intel snd_pcm snd_timer snd snd_page_alloc sky2 i2c_i801 rtc [last unloaded: crc_itu_t]
    Pid: 9, comm: events/0 Not tainted 2.6.25-rc2 #3
    RIP: 0010:[<ffffffff8807b455>]  [<ffffffff8807b455>]
    RSP: 0018:ffff81007dcdde88  EFLAGS: 00010246
    RAX: ffff81007dc95040 RBX: ffff81007dee5390 RCX: 0000000000005e13
    RDX: 0000000000008c8b RSI: 0000000000000001 RDI: ffff81007dee5388
    RBP: ffff81007dc5eb40 R08: 0000000000000002 R09: ffffffff8022d05c
    R10: ffffffff8023b34c R11: ffffffff8041a353 R12: ffff81007dee5388
    R13: ffffffff8807b455 R14: ffffffff80593bc0 R15: 0000000000000000
    FS:  0000000000000000(0000) GS:ffffffff8055a000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
    CR2: ffffffff8807b455 CR3: 0000000000201000 CR4: 00000000000006e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process events/0 (pid: 9, threadinfo ffff81007dcdc000, task ffff81007dc95040)
    Stack:  ffffffff8023b396 ffffffff88082524 0000000000000000 ffffffff8807d9ae
    ffff81007dc5eb40 ffff81007dc9dce0 ffff81007dc5eb40 ffff81007dc5eb80
    ffff81007dc9dce0 ffffffffffffffff ffffffff8023be87 0000000000000000
    Call Trace:
    [<ffffffff8023b396>] ? run_workqueue+0xdf/0x1df
    [<ffffffff8023be87>] ? worker_thread+0xd8/0xe3
    [<ffffffff8023e917>] ? autoremove_wake_function+0x0/0x2e
    [<ffffffff8023bdaf>] ? worker_thread+0x0/0xe3
    [<ffffffff8023e813>] ? kthread+0x47/0x74
    [<ffffffff804198e0>] ? trace_hardirqs_on_thunk+0x35/0x3a
    [<ffffffff8020c008>] ? child_rip+0xa/0x12
    [<ffffffff8020b6e3>] ? restore_args+0x0/0x3d
    [<ffffffff8023e68a>] ? kthreadd+0x14c/0x171
    [<ffffffff8023e68a>] ? kthreadd+0x14c/0x171
    [<ffffffff8023e7cc>] ? kthread+0x0/0x74
    [<ffffffff8020bffe>] ? child_rip+0x0/0x12

    Code:  Bad RIP value.
    RIP  [<ffffffff8807b455>]
    RSP <ffff81007dcdde88>
    CR2: ffffffff8807b455
    ---[ end trace c7366c6657fe5bed ]---

Note that this crash happened _after_ firewire-core was unloaded.  The
shared workqueue tried to run firewire-core's device initialization jobs
or similar jobs.

The fix makes sure that firewire-ohci and hence firewire-core is not
unloaded before all device shutdown jobs have been completed.  This is
determined by the count of device initializations minus device releases.

Also skip useless retries in the node initialization job if the node is
to be shut down.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Jarod Wilson <jwilson@redhat.com>
2008-03-02 12:35:46 +01:00
..
acorn/char
acpi Merge branches 'release', 'bugzilla-9916', 'bugzilla-9982', 'bugzilla-9989', 'misc', 'suspend', 'thermal', 'thinkpad' and 'tsc' into release 2008-02-21 02:41:58 -05:00
amba
ata [libata] wrap kmap_atomic(KM_IRQ0) with local_irq_save/restore() 2008-02-29 19:10:51 -05:00
atm
auxdisplay
base Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2008-02-21 16:33:19 -08:00
block NBD: make nbd default to deadline I/O scheduler 2008-02-23 17:12:15 -08:00
bluetooth
cdrom
char Fix hpet_(un)register_irq_handler() for emulation 2008-02-29 08:06:37 -08:00
clocksource
connector CONNECTOR: make cn_already_initialized static 2008-02-26 18:42:44 -08:00
cpufreq cpufreq: fix kobject reference count handling 2008-02-21 15:27:06 -08:00
cpuidle
crypto [HIFN]: Fix invalid config ifdefs for RNG support 2008-02-15 19:15:05 +08:00
dca
dio
dma
edac
eisa
firewire firewire: fix crash in automatic module unloading 2008-03-02 12:35:46 +01:00
firmware dmi: prevent linked list corruption 2008-02-23 17:12:15 -08:00
gpio
hid
hwmon hwmon: normal_i2c arrays should be const 2008-02-18 21:58:15 -05:00
i2c i2c-i801: Add support for the ICH10 2008-02-24 20:03:42 +01:00
ide ide: remove stale comments from ide-dma.c (take 2) 2008-02-26 21:50:36 +01:00
ieee1394 ieee1394: sbp2: fix rescan-scsi-bus 2008-02-19 19:57:24 +01:00
infiniband RDMA/nes: Fix interrupt moderation low threshold 2008-02-26 16:24:29 -08:00
input
isdn
leds
lguest
macintosh PM: Introduce PM_EVENT_HIBERNATE callback state 2008-02-23 10:40:04 -08:00
mca
md dm-raid1.c: fix NULL dereferences 2008-02-19 15:52:27 -08:00
media V4L/DVB (7219): zoran: Fix namespace conflicts with Zoran 'GPIO_MAX' enum 2008-02-18 12:18:28 -03:00
memstick
message [SCSI] mptbase: fix use-after-free's 2008-02-22 09:08:13 -06:00
mfd
misc Merge branches 'release', 'bugzilla-9916', 'bugzilla-9982', 'bugzilla-9989', 'misc', 'suspend', 'thermal', 'thinkpad' and 'tsc' into release 2008-02-21 02:41:58 -05:00
mmc
mtd Introduce path_put() 2008-02-14 21:13:33 -08:00
net [BNX2X]: update version, remove CVS strings 2008-02-28 11:58:49 -08:00
nubus
of
oprofile d_path: Make get_dcookie() use a struct path argument 2008-02-14 21:17:08 -08:00
parisc
parport
pci copyright owner and author clean up for intel iommu and related files 2008-02-23 17:12:14 -08:00
pcmcia PCI: drivers/pcmcia/i82092.c: fix up after pci_bus_region changes 2008-02-21 15:34:35 -08:00
pnp Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2008-02-14 21:29:46 -08:00
power
ps3 [POWERPC] PS3: Update sys-manager button events 2008-02-14 22:11:01 +11:00
rapidio
rtc rtc-cmos: display HPET emulation mode 2008-02-23 17:12:14 -08:00
s390 claw: make use of DIV_ROUND_UP 2008-02-23 23:57:45 -05:00
sbus
scsi fix vmsas.c file permissions 2008-02-23 19:49:34 -08:00
serial Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6 2008-02-29 08:41:13 -08:00
sh maple: fix device detection 2008-02-26 14:12:09 +09:00
sn
spi spi: pxa2xx_spi clock polarity fix 2008-02-23 17:12:14 -08:00
ssb SSB PCI core driver: use new SPROM data structure 2008-02-28 09:29:58 -05:00
tc
telephony
thermal thermal: use ERR_PTR for returning error 2008-02-15 18:21:30 -05:00
uio UIO: fix Greg's stupid changes 2008-02-21 15:27:07 -08:00
usb Fix u132-hcd.c compile error 2008-02-23 20:29:09 -08:00
video drivers/video/uvesafb.c: fix section mismatch warning in param_set_scroll() 2008-02-23 17:12:15 -08:00
virtio
w1
watchdog [WATCHDOG] HP ProLiant WatchDog driver 2008-02-18 17:06:21 +00:00
xen
zorro
Kconfig
Makefile