Hi, starting with Linux 3.15, my USB 3.0 disks no longer work: accessing them hangs, then causes a oops on a machine with an ASMedia asm1042 USB 3.0 controller, whereas they work fine on another machine using a different USB 3.0 controller. Disabling UAS in the kernel configuration makes the problem disappear. Blacklisting the UAS module does not solve the issue, as the disks are then no longer detected. I have reproduced the problem with the vanilla Linux 4.2-rc5 and put the log here: https://click-hack.org/~gilles/oops.txt One disk is powered up at the end of the boot, around 7.361038s, in order to have the messages clearly separated from the boot. The disk takes a long time to be detected, and after it has been mounted a "find" process is launched on its mount point (after 24.010623s). find hangs, and after a timeout, the system oopses. The oops happens in function xhci_kill_ring_urbs at address ffffffff81436523. The disassembly of that function is: ffffffff81436509 <xhci_kill_ring_urbs>: ffffffff81436509: e8 62 b7 14 00 callq ffffffff81581c70 <__fentry__> ffffffff8143650e: 55 push %rbp ffffffff8143650f: 48 89 e5 mov %rsp,%rbp ffffffff81436512: 41 55 push %r13 ffffffff81436514: 49 89 f5 mov %rsi,%r13 ffffffff81436517: 41 54 push %r12 ffffffff81436519: 53 push %rbx ffffffff8143651a: 48 8d 5e 40 lea 0x40(%rsi),%rbx ffffffff8143651e: 41 54 push %r12 ffffffff81436520: 49 89 fc mov %rdi,%r12 ffffffff81436523: 49 8b 45 40 mov 0x40(%r13),%rax addr2line gives : include/linux/list.h:189 (discriminator 1) In order to allow disabling UAS on this machine without disabling it in kernel configuration, I have temporarily modified the usb-storage module to use vid and pid 0 to apply a quirk to every device, as in the following patch: diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index cda42cf..1e519ad 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c @@ -484,12 +484,17 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags) p = quirks; while (*p) { + u16 quirk_vid, quirk_pid; + /* Each entry consists of VID:PID:flags */ - if (vid == simple_strtoul(p, &p, 16) && - *p == ':' && - pid == simple_strtoul(p+1, &p, 16) && - *p == ':') - break; + quirk_vid = simple_strtoul(p, &p, 16); + if (*p == ':') { + quirk_pid = simple_strtoul(p+1, &p, 16); + if (*p == ':' + && (quirk_vid == vid || !quirk_vid) + && (quirk_pid == pid || !quirk_pid)) + break; + } /* Move forward to the next entry */ while (*p) { And pass quirks=0:0:u as an argument to the uas module. It is unclear to me whether the ASMedia asm1042 chip supports UAS, but it would seem it does since the motherboard support provides a Windows driver called "USB 3.0 Boost", which seems to be a driver for UAS. Please tell me if you need more information, I can also arrange for remote access to the machine if anyone is interested. Regards. -- Gilles. https://click-hack.org -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html