Gert Wollny wrote:
Oops in 2.5.66 when removing the module "uhci_hcd"
Try this ... it reverts a change which prevented drivers
from cleaning up in their disconnect() routines, and a
number of people have reported that it solves their
problems.
Other modules can be removed.
(Please CC me, I'm not on the list. )
command to trigger the Oops:
rmmod uhci_hcd
printing eip:
c012ee53
*pde = 0
Oops: 0002 [#1]
CPU: 0
EIP: 0060:c012ee53 Not tainted
EFLAGS: 00010002
EIP is at run_timer_softirq+0xe3/0x400
eax: 6b6b6b6b6 ebx: 6b6b6b6b6 ecx: cf1f3454 edx: 6b6b6b6b
esi: 6b6b6b6b6 edi: cd95c000 ebp: cd95df68: esp: cd95df34
ds: 007B es: 007B ss: 0068
Process usb.agent (bid: 658, threadinfo=cd95c000 task=cd997320)
Call Trace
timer_interrupt+0x1a0/03f0
do_brk+0x143/0x220
do_softirq+0xB5/0xc0
do_IRG+0x245/0x380
sys_read+0x45/0x60
common_interrupt+0x18/0x20
code 89 50 04 89 02 c7 41 30 00 00 00 00 81 3d 00 68 3d c0 3c 4b
kernel/timer.c: 302: spin_lock(kernel/timer.c:c03d6800) already locked
by kernel/timer.c/398
Kernel panic: Aiee, killing interrupt handler!
In interrupt handler - not syncing
--- 1.15/drivers/usb/core/urb.c Thu Mar 13 10:45:40 2003
+++ edited/drivers/usb/core/urb.c Thu Mar 20 11:17:55 2003
@@ -384,11 +384,11 @@
/* FIXME
* We should not care about the state here, but the host controllers
* die a horrible death if we unlink a urb for a device that has been
- * physically removed.
+ * physically removed. (after driver->disconnect returns...)
*/
if (urb &&
urb->dev &&
- (urb->dev->state >= USB_STATE_DEFAULT) &&
+ // (urb->dev->state >= USB_STATE_DEFAULT) &&
urb->dev->bus &&
urb->dev->bus->op)
return urb->dev->bus->op->unlink_urb(urb);