On Wed, 7 Jul 2004, Jesse Stockall wrote: > On Wed, 2004-07-07 at 09:57, Alan Stern wrote: > > > > A stack trace (alt-SysRq-T) showing where the usbhid module is hung up > > would be helpful. > > > > Here you go:
> modprobe D C039ACA0 0 4857 4835 (NOTLB) > f6e2df3c 00000082 f76b20d0 c039aca0 00000001 c012fb68 f89c1000 00000019 > 0031dd45 1201f24b 0000000e f76b20d0 f76b2278 c033a404 f76b20d0 > f76b20d0 > c02fac60 c02baaad f89a4b8c f6cee4c0 c033a408 f7c33ed8 c033a408 > f76b20d0 > Call Trace: > [<c012fb68>] load_module+0x788/0xa30 > [<c02baaad>] rwsem_down_write_failed+0x8d/0x195 > [<c0250970>] .text.lock.usb+0x5a/0xaa > [<c024f95d>] usb_register+0x3d/0xb0 > [<f896600f>] hid_init+0xf/0x2d [usbhid] > [<c012ff24>] sys_init_module+0x114/0x230 > [<c0104035>] sysenter_past_esp+0x52/0x71 This shows that some thread has locked the usb_all_devices_rwsem but didn't unlock it. Kind of hard to tell where that occurred, though. Did you apply that short patch I sent out yesterday? It's included in the patch below. This patch will print a lot of extra information related to that rwsem in the system log. Probably everything we need will be in the part of the log corresponding to when the usbhid module is loaded. Alan Stern ===== drivers/usb/core/usb.c 1.281 vs edited ===== --- 1.281/drivers/usb/core/usb.c Wed Jun 30 09:44:26 2004 +++ edited/drivers/usb/core/usb.c Wed Jul 7 14:04:02 2004 @@ -854,6 +854,9 @@ */ void usb_lock_device(struct usb_device *udev) { + printk(KERN_INFO "%s: udev=%p count=%lx\n", __FUNCTION__, udev, + usb_all_devices_rwsem.count); + dump_stack(); down_read(&usb_all_devices_rwsem); down(&udev->serialize); } @@ -869,9 +872,12 @@ */ int usb_trylock_device(struct usb_device *udev) { + printk(KERN_INFO "%s: udev=%p count=%lx\n", __FUNCTION__, udev, + usb_all_devices_rwsem.count); + dump_stack(); if (!down_read_trylock(&usb_all_devices_rwsem)) return 0; - if (!down_trylock(&udev->serialize)) { + if (down_trylock(&udev->serialize)) { up_read(&usb_all_devices_rwsem); return 0; } @@ -931,6 +937,8 @@ */ void usb_unlock_device(struct usb_device *udev) { + printk(KERN_INFO "%s: udev=%p count=%lx\n", __FUNCTION__, udev, + usb_all_devices_rwsem.count); up(&udev->serialize); up_read(&usb_all_devices_rwsem); } @@ -943,6 +951,9 @@ */ void usb_lock_all_devices(void) { + printk(KERN_INFO "%s: count=%lx\n", __FUNCTION__, + usb_all_devices_rwsem.count); + dump_stack(); down_write(&usb_all_devices_rwsem); } @@ -951,6 +962,8 @@ */ void usb_unlock_all_devices(void) { + printk(KERN_INFO "%s: count=%lx\n", __FUNCTION__, + usb_all_devices_rwsem.count); up_write(&usb_all_devices_rwsem); } ------------------------------------------------------- This SF.Net email sponsored by Black Hat Briefings & Training. Attend Black Hat Briefings & Training, Las Vegas July 24-29 - digital self defense, top technical experts, no vendor pitches, unmatched networking opportunities. Visit www.blackhat.com _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel