Hello! All stuff below is from 2.4.5 kernel I experienced different problems with USB drivers on my SMP system. here is what I have: 00:07.2 USB Controller: VIA Technologies, Inc. UHCI USB (rev 16) (prog-if 00 [UHCI]) Subsystem: Unknown device 0925:1234 Flags: bus master, medium devsel, latency 32, IRQ 19 I/O ports at c400 [size=32] Capabilities: [80] Power Management version 2 00:07.3 USB Controller: VIA Technologies, Inc. UHCI USB (rev 16) (prog-if 00 [UHCI]) Subsystem: Unknown device 0925:1234 Flags: bus master, medium devsel, latency 32, IRQ 19 I/O ports at c800 [size=32] Capabilities: [80] Power Management version 2 I tried both uhci and usb-uhci driver. First of all, when I insert USB device into USB bus, I got a lot of messages about it is not accepting new address(not just 2 such messages like on other UP machine I have, when device is not ready). Though device in fact is accepting the address. (I run Linux on this device, so I see both sides of link). If I plug/unplug device for several times, it eventually works. But if I try to rmmod uhci/usb-uhci driver when device kernel thinks that device is not accepting an address, I'm getting an oops. (In fact I have this same oops on insertion of usb-uhci and on removal of uhci): usb-uhci version: usb-uhci.c: $Revision: 1.259 $ time 11:02:12 May 26 2001 usb-uhci.c: High bandwidth mode enabled usb-uhci.c: USB UHCI at I/O 0xc400, IRQ 19 usb-uhci.c: Detected 2 ports usb.c: new USB bus registered, assigned bus number 1 hub.c: USB hub found hub.c: 2 ports detected usb-uhci.c: USB UHCI at I/O 0xc800, IRQ 19 usb-uhci.c: Detected 2 ports hub.c: USB new device connect on bus1/2, assigned device number 2 usb.c: new USB bus registered, assigned bus number 2 hub.c: USB hub found hub.c: 2 ports detected usb-uhci.c: v1.251 Georg Acher, Deti Fliegl, Thomas Sailer, Roman Weissgaerber usb-uhci.c: USB Universal Host Controller Interface driver usb.c: USB disconnect on device 1 usb.c: USB disconnect on device 2 Unable to handle kernel NULL pointer dereference at virtual address 0000000c printing eip: c01a3162 *pde = 00000000 Oops: 0000 CPU: 0 EIP: 0010:[<c01a3162>] EFLAGS: 00010246 eax: 00000000 ebx: d7ea54e4 ecx: c021e4dd edx: c021e4dc esi: d7a9de60 edi: d7ebba00 ebp: d7ea54a0 esp: d7375ef4 ds: 0018 es: 0018 ss: 0018 Process modprobe (pid: 217, stackpage=d7375000) Stack: 00000007 c023a240 c021e42c 00000000 00000025 d7ebba40 d7ebbb24 00000002 d7ebba00 c01a42fc c021e8a7 d7ebba00 c01a5f9c ffffffff d7844a04 d7844ae8 c1669400 d7844a00 c01a42e0 d7844ae8 00000018 0000000e d7ea55a0 d8835000 Call Trace: [<c01a42fc>] [<c01a5f9c>] [<c01a42e0>] [<d8835000>] [<d8833d8a>] [<c019f19f>] [<d8830000>] [<d883426a>] [<d8835000>] [<c0118a9e>] [<d8830000>] [<c0117e62>] [<d8830000>] [<c0106e0b>] Code: 8b 40 0c 8b 50 04 89 5e 1c c7 04 24 08 00 00 00 8b 87 bc 00 usb_control/bulk_msg: timeout usb.c: USB device not accepting new address=2 (error=-110) hub.c: get_port_status(2) failed (err = -19) hub.c: get_port_status(2) failed (err = -19) hub.c: get_port_status(2) failed (err = -19) hub.c: get_port_status(2) failed (err = -19) hub.c: get_port_status(2) failed (err = -19) hub.c: Cannot enable port 2 of hub 1, disabling port. hub.c: Maybe the USB cable is bad? hub.c: cannot disable port 2 of hub 1 (err = -19) hub.c: get_hub_status failed >>EIP; c01a3162 <call_policy+162/1f0> <===== Trace; c01a42fc <usb_disconnect+fc/130> Trace; c01a5f9c <hub_disconnect+1c/80> Trace; c01a42e0 <usb_disconnect+e0/130> Trace; d8835000 <.data.end+6bc9/????> Trace; d8833d8a <.data.end+5953/????> Trace; c019f19f <pci_unregister_driver+2f/50> Trace; d8830000 <.data.end+1bc9/????> Trace; d883426a <.data.end+5e33/????> Trace; d8835000 <.data.end+6bc9/????> Trace; c0118a9e <free_module+1e/d0> Trace; d8830000 <.data.end+1bc9/????> Trace; c0117e62 <sys_delete_module+132/270> Trace; d8830000 <.data.end+1bc9/????> Trace; c0106e0b <system_call+33/38> Code; c01a3162 <call_policy+162/1f0> 00000000 <_EIP>: Code; c01a3162 <call_policy+162/1f0> <===== 0: 8b 40 0c mov 0xc(%eax),%eax <===== Code; c01a3165 <call_policy+165/1f0> 3: 8b 50 04 mov 0x4(%eax),%edx Code; c01a3168 <call_policy+168/1f0> 6: 89 5e 1c mov %ebx,0x1c(%esi) Code; c01a316b <call_policy+16b/1f0> 9: c7 04 24 08 00 00 00 movl $0x8,(%esp,1) Code; c01a3172 <call_policy+172/1f0> 10: 8b 87 bc 00 00 00 mov 0xbc(%edi),%eax uhci version: uhci.c: USB UHCI at I/O 0xc400, IRQ 19 usb.c: new USB bus registered, assigned bus number 1 hub.c: USB hub found hub.c: 2 ports detected uhci.c: USB UHCI at I/O 0xc800, IRQ 19 usb.c: new USB bus registered, assigned bus number 2 hub.c: USB hub found hub.c: 2 ports detected uhci.c: Linus Torvalds, Johannes Erdfelt, Randy Dunlap, Georg Acher, Deti Fliegl, Thomas Sailer, Roman Weissgaerber uhci.c: USB Universal Host Controller Interface driver hub.c: USB new device connect on bus1/2, assigned device number 2 usb_control/bulk_msg: timeout usb.c: USB device not accepting new address=2 (error=-110) hub.c: USB new device connect on bus1/2, assigned device number 3 usb.c: USB disconnect on device 1 usb.c: USB disconnect on device 3 Unable to handle kernel NULL pointer dereference at virtual address 0000000c printing eip: c01a3162 *pde = 00000000 Oops: 0000 CPU: 1 EIP: 0010:[<c01a3162>] EFLAGS: 00010246 eax: 00000000 ebx: d70be9a4 ecx: c021e4dd edx: c021e4dc esi: d708b340 edi: d723f400 ebp: d70be960 esp: d6281f08 ds: 0018 es: 0018 ss: 0018 Process rmmod (pid: 827, stackpage=d6281000) Stack: 00000007 c023a240 c021e42c 00000000 00000025 d723f440 d723f524 00000003 d723f400 c01a42fc c021e8a7 d723f400 c01a5f9c ffffffff d62d5e04 d62d5ee8 d68a6620 d62d5e00 c01a42e0 d62d5ee8 00000018 0000000e d70be860 d883bec0 Call Trace: [<c01a42fc>] [<c01a5f9c>] [<c01a42e0>] [<d883bec0>] [<d883a8eb>] [<c019f19f>] [<d8836000>] [<d883aa6a>] [<d883bec0>] [<c0118a9e>] [<d8836000>] [<c0117e62>] [<d8836000>] [<c0106e0b>] Code: 8b 40 0c 8b 50 04 89 5e 1c c7 04 24 08 00 00 00 8b 87 bc 00 usb_control/bulk_msg: timeout usb.c: USB device not accepting new address=3 (error=-110) >>EIP; c01a3162 <call_policy+162/1f0> <===== Trace; c01a42fc <usb_disconnect+fc/130> Trace; c01a5f9c <hub_disconnect+1c/80> Trace; c01a42e0 <usb_disconnect+e0/130> Trace; d883bec0 <END_OF_CODE+da89/????> Trace; d883a8eb <END_OF_CODE+c4b4/????> Trace; c019f19f <pci_unregister_driver+2f/50> Trace; d8836000 <.data.end+7bc9/????> Trace; d883aa6a <END_OF_CODE+c633/????> Trace; d883bec0 <END_OF_CODE+da89/????> Trace; c0118a9e <free_module+1e/d0> Trace; d8836000 <.data.end+7bc9/????> Trace; c0117e62 <sys_delete_module+132/270> Trace; d8836000 <.data.end+7bc9/????> Trace; c0106e0b <system_call+33/38> Code; c01a3162 <call_policy+162/1f0> 00000000 <_EIP>: Code; c01a3162 <call_policy+162/1f0> <===== 0: 8b 40 0c mov 0xc(%eax),%eax <===== Code; c01a3165 <call_policy+165/1f0> 3: 8b 50 04 mov 0x4(%eax),%edx Code; c01a3168 <call_policy+168/1f0> 6: 89 5e 1c mov %ebx,0x1c(%esi) Code; c01a316b <call_policy+16b/1f0> 9: c7 04 24 08 00 00 00 movl $0x8,(%esp,1) Code; c01a3172 <call_policy+172/1f0> 10: 8b 87 bc 00 00 00 mov 0xbc(%edi),%eax As you can see, oops appear in the same place both times, it is in drivers/usb/usb.c::call_policy(), line number 834 (dev->actconfig appears to be NULL). So I made this patch to it: --- drivers/usb/usb.c.orig Sat May 26 13:44:10 2001 +++ drivers/usb/usb.c Sat May 26 13:46:01 2001 @@ -830,7 +830,7 @@ dev->descriptor.bDeviceClass, dev->descriptor.bDeviceSubClass, dev->descriptor.bDeviceProtocol) + 1; - if (dev->descriptor.bDeviceClass == 0) { + if (dev->descriptor.bDeviceClass == 0 && dev->actconfig != 0) { int alt = dev->actconfig->interface [0].act_altsetting; /* a simple/common case: one config, one interface, one driver After this I got another oops on removal (this tiem I played only with uhci driver): uhci.c: USB UHCI at I/O 0xc400, IRQ 19 hub.c: USB hub found hub.c: 2 ports detected uhci.c: USB UHCI at I/O 0xc800, IRQ 19 hub.c: USB hub found hub.c: 2 ports detected uhci.c: Linus Torvalds, Johannes Erdfelt, Randy Dunlap, Georg Acher, Deti Fliegl, Thomas Sailer, Roman Weissgaerber uhci.c: USB Universal Host Controller Interface driver hub.c: USB new device connect on bus1/2, assigned device number 2 usb_control/bulk_msg: timeout usb.c: USB device not accepting new address=2 (error=-110) hub.c: USB new device connect on bus1/2, assigned device number 3 usb.c: USB disconnect on device 1 usb.c: USB disconnect on device 3 usb.c: USB bus 1 deregistered pci_pool_destroy 00:07.2/uhci_qh, d6219000 busy pci_pool_destroy 00:07.2/uhci_td, d621a000 busy usb.c: USB disconnect on device 1 usb.c: USB bus 2 deregistered kmem_cache_destroy: Can't free all objects d7eb3a58 uhci: not all urb_priv's were freed usb_control/bulk_msg: timeout Unable to handle kernel paging request at virtual address d883be7c printing eip: c01a3429 *pde = 17ebc067 *pte = 00000000 Oops: 0000 CPU: 1 EIP: 0010:[usb_unlink_urb+25/48] EIP: 0010:[<c01a3429>] EFLAGS: 00010286 eax: d883be6c ebx: ffffff92 ecx: 00000082 edx: d720da40 esi: d7eba000 edi: d7ebbe9c ebp: 00000000 esp: d7ebbe70 ds: 0018 es: 0018 ss: 0018 Process khubd (pid: 8, stackpage=d7ebb000) Stack: d720da40 c01a35ac d720da40 c021e5a0 d7ebbeac d7ebbe9c ffffffff 00000001 d7ebbea0 d7ebbea0 d7ebbe94 00000001 d7ebbea0 d7ebbea0 00000000 00000000 d7eba000 d7ebbea0 d7ebbea0 d7761200 80000000 d689ac20 00000000 c01a364f Call Trace: [usb_start_wait_urb+316/384] [usb_internal_control_msg+95/112] [usb_control_msg+129/160] [usb_set_address+41/48] [usb_new_device+29/464] [usb_hub_port_connect_change+539/784] [usb_hub_port_connect_change+583/784] Call Trace: [<c01a35ac>] [<c01a364f>] [<c01a36e1>] [<c01a44a9>] [<c01a4efd>] [<c01a657b>] [<c01a65a7>] [usb_hub_events+292/704] [usb_hub_thread+69/112] [prepare_namespace+0/16] [kernel_thread+38/48] [usb_hub_thread+0/112] Code: ff 50 10 59 c3 89 f6 b8 ed ff ff ff c3 8d 76 00 8d bc 27 00 So it seems, whenewer we have some not yet fully initialized devices, we cannot unload host controller driver because of some pending URBs or something. Perhaps this long letter will help someone to fix a problem. (and if someone have a fix that will let my device to be detected right away like on an UP system, feel free to send me a patch to try ;) ) Bye, Oleg - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/