We've found some kind of deadlock between these 2 subsystems.
To provoke it:
0. mount -t usbdevfs none /proc/bus/usb
1. plug a USB2 flash drive into a USB1.1 port. The device we're using
looks like this:
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0ea0 ProdID=2168 Rev= 2.00
S: Manufacturer=USB
S: Product=Mass stroage
S: SerialNumber=230760A43FEF7392
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=83(I) Atr=03(Int.) MxPS= 2 Ivl=1ms
2. cat /proc/bus/usb/devices
3. badblocks -sv /dev/sda (or whatever device the flash drive is)
4. cat /proc/bus/usb/devices (concurrently with #3 running)
The badblocks process is now stuck, and the output from step 4 is very
sluggish.
We have reproduced this so far on these platforms:
x86, UHCI, RH 2.4.18-14 kernel
x86, UHCI, stock 2.6.1 & 2.6.4 kernels
sh64, OHCI, 2.4.23-pre6 kernel
sh, Philips USB ISP1161A1BM, 2.4.23-pre6 kernel
However the problem is not present on
sh64, OHCI, 2.4.26-pre2 kernel
Perhaps this means there's been a fix in 2.4 between 2.4.23 and 2.4.26
that's not been forward ported to 2.6 yet, or it may be something else
entirely.
Taking the x86 2.6.4, "ps -auxww | grep ' D' " gives
root 410 0.0 0.0 0 0 ? DW 14:10 0:00 [usb-storage]
root 411 0.0 0.0 0 0 ? DW 14:10 0:00 [scsi_eh_0]
root 441 0.0 0.1 1364 408 pts/1 D 14:13 0:00 badblocks -sv /dev/sda
and Alt-SysRq-T filtered down to these processes gives
usb-storage D 6C667D11 0 410 1 411 344 (L-TLB)
ce1f3e0c 00000046 d349ec20 6c667d11 0000009e 00000001 00000000 ce1f3df0
ce1f3ddc 6c667d11 0000009e d349ec20 d349ec40 0002b5ee 6c667d11 0000009e
ce8849e0 ce1f2000 cc9c6cec ce1f3e30 ce1f3e68 c011c7be c03b00ad 00000753
Call Trace:
[<c011c7be>] wait_for_completion+0x7e/0xb0
[<c011c590>] default_wake_function+0x0/0x20
[<c010b2ac>] common_interrupt+0x18/0x20
[<c011c590>] default_wake_function+0x0/0x20
[<c02c2cc9>] usb_sg_wait+0xa9/0x120
[<c02d5e5a>] usb_stor_bulk_transfer_sglist+0x8a/0xe0
[<c02d5ef4>] usb_stor_bulk_transfer_sg+0x44/0x80
[<c02d6634>] usb_stor_Bulk_transport+0x124/0x2b0
[<c02d5f54>] usb_stor_invoke_transport+0x24/0x2c0
[<c011c590>] default_wake_function+0x0/0x20
[<c02d551e>] usb_stor_transparent_scsi_command+0x1e/0x60
[<c02d6c99>] usb_stor_control_thread+0x179/0x200
[<c010b052>] ret_from_fork+0x6/0x14
[<c02d6b20>] usb_stor_control_thread+0x0/0x200
[<c02d6b20>] usb_stor_control_thread+0x0/0x200
[<c01092b9>] kernel_thread_helper+0x5/0xc
scsi_eh_0 D FFFF0174 0 411 1 410 (L-TLB)
ce74def0 00000046 00000002 ffff0174 40249fcc 00000002 ffff0175 40249fc9
00000002 ffff0176 40249fc6 00000002 ffff0177 00003c9c 69e10143 000000a5
cdaa6fc0 ce74c000 cc9c6d14 ce74df14 ce74df4c c011c7be c03b00ad 00000753
Call Trace:
[<c011c7be>] wait_for_completion+0x7e/0xb0
[<c011c590>] default_wake_function+0x0/0x20
[<c011c590>] default_wake_function+0x0/0x20
[<c011b578>] recalc_task_prio+0xa8/0x1d0
[<c02d4d26>] command_abort+0x76/0x90
[<c0299ae5>] scsi_try_to_abort_cmd+0x45/0x50
[<c0299c0a>] scsi_eh_abort_cmds+0x4a/0x80
[<c029a5c5>] scsi_unjam_host+0x85/0xb0
[<c029a6a8>] scsi_error_handler+0xb8/0xe0
[<c029a5f0>] scsi_error_handler+0x0/0xe0
[<c01092b9>] kernel_thread_helper+0x5/0xc
badblocks D CEA505A0 0 441 317 (NOTLB)
cbe0dda4 00000082 c029baff cea505a0 c0265c5e cc9c6540 cea5057c cc9c6400
ce884820 cbe0ddd8 cbe0dd8c c1337120 c1337140 0001224f bba1b6a6 00000099
cdaa6480 c11def70 c1320880 cbe0ddd8 cbe0ddac c011d22e cbe0de04 c0137015
Call Trace:
[<c029baff>] scsi_request_fn+0x1cf/0x2b0
[<c0265c5e>] elv_next_request+0x4e/0x110
[<c011d22e>] io_schedule+0xe/0x20
[<c0137015>] __lock_page+0xa5/0xd0
[<c011d9b0>] autoremove_wake_function+0x0/0x50
[<c011d9b0>] autoremove_wake_function+0x0/0x50
[<c013762d>] do_generic_mapping_read+0x2cd/0x3a0
[<c0137700>] file_read_actor+0x0/0x100
[<c01379a7>] __generic_file_aio_read+0x1a7/0x1e0
[<c0137700>] file_read_actor+0x0/0x100
[<c0137adf>] generic_file_read+0x8f/0xb0
[<c011c590>] default_wake_function+0x0/0x20
[<c011c590>] default_wake_function+0x0/0x20
[<c0241c88>] tty_write+0x188/0x1e0
[<c011b578>] recalc_task_prio+0xa8/0x1d0
[<c0157e77>] block_llseek+0x37/0xe0
[<c01509ca>] vfs_read+0xaa/0x130
[<c0150705>] sys_lseek+0x65/0xc0
[<c0150c7f>] sys_read+0x3f/0x60
[<c010b13f>] syscall_call+0x7/0xb
This message is repeated in the syslog:
usb 1-2: control timeout on ep0in
Does this leap out at anybody? Is there more information we can
provide?
Cheers
Richard
--
Richard \\\ SH-4/SH-5 Core & Debug Architect
Curnow \\\ SuperH (UK) Ltd, Bristol
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel