ASMedia asm1042 USB 3.0 controller not working with UAS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux