Hi Yuyang,
>
> ----- Mensaje original -----
> De: "Yuyang Du" <[email protected]>
> Para: "Juan Zea" <[email protected]>
> CC: "Shuah Khan" <[email protected]>, [email protected], "Bjørn Mork"
> <[email protected]>, [email protected], "Valentina Manea"
> <[email protected]>
> Enviados: Miércoles, 22 de Noviembre 2017 8:54:03
> Asunto: Re: usbip port number limits
>
> Hi Juan,
>
> On Tue, Nov 21, 2017 at 12:24:01PM +0100, Juan Zea wrote:
> > Please excuse me... I have reported two different problems in this post,
> > and I think things are mixing up a bit. My bad. I've found two different
> > problems:
> >
> > 1.- When compiling vhci driver with multiple hubs (in latest kernel), usbip
> > tool doesn't seem able to "jump" to the second controller. As far as I
> > understand, it seems to be a problem with high speed devices trying to get
> > connected to super speed ports. I made a patch for avoiding this situation
> > which is almost the same as the one you just sent. Both patches work. I can
> > compile with several hubs of one port, and connect two devices via usbip
> > and the second gets connected to the second controller (skipping the super
> > speed port of first controller).
> >
> > 2.- The problem is some of these devices don't work, whatsoever controller
> > or hub compiling configuration I do. A fingerprint reader and also recently
> > discovered flash usb sticks don't work either. You can connect them with
> > usbip tool, and they list with lsusb with no problem at all. But when you
> > try to use them, you get this "kernel BUG at
> > drivers/usb/usbip/vhci_hcd.c:669!" (by the way, the line number has changed
> > in the latest pull from master I've just tested, but it's the same line of
> > code). This second problem is the one I bisected in my last message. And I
> > got to the commit 03cd00d538a6feb0492cd153edf256ef7d7bd95e, in which both
> > devices stop working.
>
> It'd be good if you can give greater detail of the exact (as much
> info as possible) setting of the fingerprint reader case.
>
The bug launched in my repository reads:
669 BUG_ON(!urb->transfer_buffer && urb->transfer_buffer_length);
For my tests, I'm using a kvm machine, with the kernel I want to test. For
yesterday's test, I used latest commit:
e1d1ea549b57790a3d8cf6300e6ef86118d692a3. I build the kernel with this line:
make x86_64_defconfig; make kvmconfig; cat ../extra.txt >> .config; make -j8
These are the contents of extra.txt:
CONFIG_USBIP_CORE=m
CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=1
CONFIG_USBIP_VHCI_NR_HCS=4
With this, I get a kvm machine running, in which I load the vhci driver on
startup. This driver creates this devices:
root@kernel-tester:~# lsusb
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
I compile the usbip tools from within this machine on startup too (from the
same repository as kernel).
The server is my own laptop, running this kernel: 4.11.0-14-generic, also host
to the kvm machine. Network for kvm is a bridge.
In my laptop, the fingerprint reader lists like this:
Bus 002 Device 004: ID 05ba:000a DigitalPersona, Inc. Fingerprint Reader
And this is dmesg when connecting it to my laptop:
[ 3941.459772] usb 2-1.3: new full-speed USB device number 4 using ehci-pci
[ 3941.575718] usb 2-1.3: New USB device found, idVendor=05ba, idProduct=000a
[ 3941.575722] usb 2-1.3: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[ 3941.575725] usb 2-1.3: Product: Biokey 200 Fingerprint Scanner
[ 3941.575728] usb 2-1.3: Manufacturer: ZKSoftware Inc.
[ 3941.575730] usb 2-1.3: SerialNumber: {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
Reproduce steps:
1.- Having my laptop with usbip_host module loaded, and 'usbipd -d' running in
terminal, bind the reader:
# usbip -d bind -b 2-1.3
usbip: debug: usbip.c:141:[run_command] running command: `bind'
usbip: info: bind device on busid 2-1.3: complete
dmesg reads:
[ 4092.811059] usbip-host 2-1.3: usbip-host: register new device (bus 2 dev 4)
2.- From kvm machine, with vhci_hcd module loaded, and usbip tools compiled and
installed:
# usbip -d attach -r 172.26.8.66 -b 2-1.3
usbip: debug: usbip.c:141:[run_command] running command: `attach'
libusbip: debug: vhci_driver.c:264:[usbip_vhci_driver_open] available ports: 8
libusbip: debug: vhci_driver.c:275:[usbip_vhci_driver_open] available
controllers: 4
libusbip: debug: vhci_driver.c:128:[refresh_imported_device_list] controller 0
libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 0 status 4 speed 0
devid 0
libusbip: debug: vhci_driver.c:69:[parse_status] socket 0 lbusid 0-0
libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 1 status 4 speed 0
devid 0
libusbip: debug: vhci_driver.c:69:[parse_status] socket 0 lbusid 0-0
libusbip: debug: vhci_driver.c:104:[parse_status] exit
libusbip: debug: vhci_driver.c:128:[refresh_imported_device_list] controller 1
libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 2 status 4 speed 0
devid 0
libusbip: debug: vhci_driver.c:69:[parse_status] socket 0 lbusid 0-0
libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 3 status 4 speed 0
devid 0
libusbip: debug: vhci_driver.c:69:[parse_status] socket 0 lbusid 0-0
libusbip: debug: vhci_driver.c:104:[parse_status] exit
libusbip: debug: vhci_driver.c:128:[refresh_imported_device_list] controller 2
libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 4 status 4 speed 0
devid 0
libusbip: debug: vhci_driver.c:69:[parse_status] socket 0 lbusid 0-0
libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 5 status 4 speed 0
devid 0
libusbip: debug: vhci_driver.c:69:[parse_status] socket 0 lbusid 0-0
libusbip: debug: vhci_driver.c:104:[parse_status] exit
libusbip: debug: vhci_driver.c:128:[refresh_imported_device_list] controller 3
libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 6 status 4 speed 0
devid 0
libusbip: debug: vhci_driver.c:69:[parse_status] socket 0 lbusid 0-0
libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 7 status 4 speed 0
devid 0
libusbip: debug: vhci_driver.c:69:[parse_status] socket 0 lbusid 0-0
libusbip: debug: vhci_driver.c:104:[parse_status] exit
usbip: debug: usbip_attach.c:112:[import_device] got free port 0
libusbip: debug: vhci_driver.c:362:[usbip_vhci_attach_device2] writing: 0 3
131076 2
libusbip: debug: vhci_driver.c:367:[usbip_vhci_attach_device2] attach attribute
path: /sys/devices/platform/vhci_hcd.0/attach
libusbip: debug: vhci_driver.c:375:[usbip_vhci_attach_device2] attached port: 0
kvm dmesg reads:
[ 673.438535] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3)
[ 673.438547] vhci_hcd vhci_hcd.0: devid(131076) speed(2) speed_str(full-speed)
[ 673.603515] vhci_hcd: vhci_device speed not set
[ 673.603515] vhci_hcd: vhci_device speed not set
[ 673.657449] usb 1-1: new full-speed USB device number 2 using vhci_hcd
[ 673.720497] vhci_hcd: vhci_device speed not set
[ 673.720497] vhci_hcd: vhci_device speed not set
[ 673.774416] usb 1-1: SetAddress Request (2) to port 0
[ 673.797352] usb 1-1: New USB device found, idVendor=05ba, idProduct=000a
[ 673.797357] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 673.797362] usb 1-1: Product: Biokey 200 Fingerprint Scanner
[ 673.797368] usb 1-1: Manufacturer: ZKSoftware Inc.
[ 673.797370] usb 1-1: SerialNumber: {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
laptop dmesg reads:
[ 4271.104783] usbip-host 2-1.3: stub up
[ 4271.462823] usbip-host 2-1.3: endpoint 0 is stalled
[ 4271.463558] usbip-host 2-1.3: endpoint 0 is stalled
[ 4271.464285] usbip-host 2-1.3: endpoint 0 is stalled
laptop usbipd -d reads:
usbipd: debug: usbipd.c:568:[do_standalone_mode] read event on fd[0]=3
usbipd: info: connection from 192.168.122.127:45942
usbipd: info: received request: 0x8003(5)
usbipd: info: found requested device: 2-1.3
usbip: info: connect: 2-1.3
usbipd: debug: usbipd.c:165:[recv_request_import] import request busid 2-1.3:
complete
usbipd: info: request 0x8003(5): complete
3.- lsusb in kvm machine:
# lsusb
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 05ba:000a DigitalPersona, Inc. Fingerprint Reader
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Everything seems ok.
4.- Run fprint_demo in kvm machine. It says:
Digital Persona U.are.U 4000/4000B/4500
Status: Device ready for use
Driver: uru4000
Imaging device
Up until now, everything is just the same as in previous kernel not impacted by
this.
5.- Push any Enroll button in fprint_demo. It will show the appropiate screen,
asking you to scan your finger.
When you put your finger in the fingerprint reader, fprint hangs, and you get
this in kvm dmesg:
[ 1017.475208] kernel BUG at drivers/usb/usbip/vhci_hcd.c:669!
[ 1017.476830] invalid opcode: 0000 [#1] SMP
[ 1017.477927] Modules linked in: vhci_hcd usbip_core
[ 1017.479632] CPU: 0 PID: 5257 Comm: fprint_demo Not tainted 4.14.0+ #1
[ 1017.483118] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
Ubuntu-1.8.2-1ubuntu1 04/01/2014
[ 1017.485901] task: ffff97fe7b29a4c0 task.stack: ffffa701c033c000
[ 1017.487299] RIP: 0010:vhci_urb_enqueue+0x2ee/0x450 [vhci_hcd]
[ 1017.488569] RSP: 0018:ffffa701c033fc90 EFLAGS: 00010002
[ 1017.489647] RAX: 000000000001b340 RBX: 0000000000000001 RCX: 0000000000000003
[ 1017.491174] RDX: 0000000001080020 RSI: ffff97fe7b2c9240 RDI: ffff97fe7fbb0000
[ 1017.493121] RBP: ffff97fe7fbb0000 R08: 000000000001b340 R09: 0000000000000000
[ 1017.494616] R10: 0000000000000001 R11: 0000000000000002 R12: ffff97fe70183e00
[ 1017.496113] R13: 0000000000000000 R14: ffff97fe7faef098 R15: ffff97fe7b2c9240
[ 1017.497540] FS: 00007fe3ff7f9a00(0000) GS:ffff97fe7cc00000(0000)
knlGS:0000000000000000
[ 1017.499191] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1017.500385] CR2: 0000556f8de2b010 CR3: 00000000323b1000 CR4: 00000000000006f0
[ 1017.501924] Call Trace:
[ 1017.502446] usb_hcd_submit_urb+0x83/0x890
[ 1017.503219] ? __alloc_pages_nodemask+0xe7/0x200
[ 1017.504063] ? usb_submit_urb+0x3de/0x560
[ 1017.504806] ? kmalloc_order_trace+0x18/0xa0
[ 1017.505597] proc_do_submiturb+0xc36/0xcb0
[ 1017.506432] usbdev_do_ioctl+0xd4e/0x1120
[ 1017.507353] usbdev_ioctl+0x5/0x10
[ 1017.508104] do_vfs_ioctl+0x8a/0x5a0
[ 1017.508887] ? __schedule+0x32f/0x6c0
[ 1017.509704] SyS_ioctl+0x6f/0x80
[ 1017.510440] entry_SYSCALL_64_fastpath+0x1a/0x7d
[ 1017.511422] RIP: 0033:0x7fe3faf63ea7
[ 1017.512200] RSP: 002b:00007ffeea09fe58 EFLAGS: 00000246 ORIG_RAX:
0000000000000010
[ 1017.513784] RAX: ffffffffffffffda RBX: 0000556f8dba16b0 RCX: 00007fe3faf63ea7
[ 1017.515278] RDX: 0000556f8dde1010 RSI: 000000008038550a RDI: 000000000000000b
[ 1017.516769] RBP: 0000556f8dba1840 R08: 00007fe3fb234c20 R09: 0000556f8dde1010
[ 1017.518287] R10: 00000000ffffff00 R11: 0000000000000246 R12: 00007fe3fa8fd4d8
[ 1017.519770] R13: 0000000000000000 R14: 00007ffeea0a01f0 R15: 0000000000000000
[ 1017.521301] Code: 4c 89 e7 89 04 24 e8 f2 b6 bd d1 8b 04 24 48 83 c4 20 5b
5d 41 5c 41 5d 41 5e 41 5f c3 8b 86 88 00 00 00 85 c0 0f 84 53 fd ff ff <0f> 0b
0f b7 49 02 48 c7 c6 08 4d 17 c0 4c 89 f7 e8 2d 9c 7d d1
[ 1017.525613] RIP: vhci_urb_enqueue+0x2ee/0x450 [vhci_hcd] RSP:
ffffa701c033fc90
[ 1017.527274] ---[ end trace b4edcee8867b2fdf ]---
[ 1017.475204] ------------[ cut here ]------------
[ 1017.475208] kernel BUG at drivers/usb/usbip/vhci_hcd.c:669!
[ 1017.476830] invalid opcode: 0000 [#1] SMP
[ 1017.477927] Modules linked in: vhci_hcd usbip_core
[ 1017.479632] CPU: 0 PID: 5257 Comm: fprint_demo Not tainted 4.14.0+ #1
[ 1017.483118] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
Ubuntu-1.8.2-1ubuntu1 04/01/2014
[ 1017.485901] task: ffff97fe7b29a4c0 task.stack: ffffa701c033c000
[ 1017.487299] RIP: 0010:vhci_urb_enqueue+0x2ee/0x450 [vhci_hcd]
[ 1017.488569] RSP: 0018:ffffa701c033fc90 EFLAGS: 00010002
[ 1017.489647] RAX: 000000000001b340 RBX: 0000000000000001 RCX: 0000000000000003
[ 1017.491174] RDX: 0000000001080020 RSI: ffff97fe7b2c9240 RDI: ffff97fe7fbb0000
[ 1017.493121] RBP: ffff97fe7fbb0000 R08: 000000000001b340 R09: 0000000000000000
[ 1017.494616] R10: 0000000000000001 R11: 0000000000000002 R12: ffff97fe70183e00
[ 1017.496113] R13: 0000000000000000 R14: ffff97fe7faef098 R15: ffff97fe7b2c9240
[ 1017.497540] FS: 00007fe3ff7f9a00(0000) GS:ffff97fe7cc00000(0000)
knlGS:0000000000000000
[ 1017.499191] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1017.500385] CR2: 0000556f8de2b010 CR3: 00000000323b1000 CR4: 00000000000006f0
[ 1017.501924] Call Trace:
[ 1017.502446] usb_hcd_submit_urb+0x83/0x890
[ 1017.503219] ? __alloc_pages_nodemask+0xe7/0x200
[ 1017.504063] ? usb_submit_urb+0x3de/0x560
[ 1017.504806] ? kmalloc_order_trace+0x18/0xa0
[ 1017.505597] proc_do_submiturb+0xc36/0xcb0
[ 1017.506432] usbdev_do_ioctl+0xd4e/0x1120
[ 1017.507353] usbdev_ioctl+0x5/0x10
[ 1017.508104] do_vfs_ioctl+0x8a/0x5a0
[ 1017.508887] ? __schedule+0x32f/0x6c0
[ 1017.509704] SyS_ioctl+0x6f/0x80
[ 1017.510440] entry_SYSCALL_64_fastpath+0x1a/0x7d
[ 1017.511422] RIP: 0033:0x7fe3faf63ea7
[ 1017.512200] RSP: 002b:00007ffeea09fe58 EFLAGS: 00000246 ORIG_RAX:
0000000000000010
[ 1017.513784] RAX: ffffffffffffffda RBX: 0000556f8dba16b0 RCX: 00007fe3faf63ea7
[ 1017.515278] RDX: 0000556f8dde1010 RSI: 000000008038550a RDI: 000000000000000b
[ 1017.516769] RBP: 0000556f8dba1840 R08: 00007fe3fb234c20 R09: 0000556f8dde1010
[ 1017.518287] R10: 00000000ffffff00 R11: 0000000000000246 R12: 00007fe3fa8fd4d8
[ 1017.519770] R13: 0000000000000000 R14: 00007ffeea0a01f0 R15: 0000000000000000
[ 1017.521301] Code: 4c 89 e7 89 04 24 e8 f2 b6 bd d1 8b 04 24 48 83 c4 20 5b
5d 41 5c 41 5d 41 5e 41 5f c3 8b 86 88 00 00 00 85 c0 0f 84 53 fd ff ff <0f> 0b
0f b7 49 02 48 c7 c6 08 4d 17 c0 4c 89 f7 e8 2d 9c 7d d1
[ 1017.525613] RIP: vhci_urb_enqueue+0x2ee/0x450 [vhci_hcd] RSP:
ffffa701c033fc90
[ 1017.527274] ---[ end trace b4edcee8867b2fdf ]---
Now, lsusb still lists the fingerprint reader. If you try to run fprint_demo
again, it will hang immediately, showing a blank screen (I suppose it hangs
trying to access the reader). The terminal from within I'm launching it, is
also hung.
6.- Try to unload vhci_hcd module:
# rmmod vhci_hcd
rmmod: ERROR: ../libkmod/libkmod.c:514 lookup_builtin_file() could not open
builtin file '/lib/modules/4.14.0+/modules.builtin.bin'
Terminal hangs.
dmesg reads:
[ 1319.204615] vhci_hcd vhci_hcd.0: remove, state 4
[ 1319.206679] usb usb2: USB disconnect, device number 1
[ 1319.204615] vhci_hcd vhci_hcd.0: remove, state 4
[ 1319.206679] usb usb2: USB disconnect, device number 1
[ 1319.214494] vhci_hcd: stop threads
[ 1319.215507] vhci_hcd: release socket
[ 1319.216529] vhci_hcd: disconnect device
[ 1319.214494] vhci_hcd: stop threads[ 1319.218734] vhci_hcd vhci_hcd.0: USB
bus 2 deregistered
[ 1319.215507] vhci_hcd: release socket
[ 1319.223402] vhci_hcd vhci_hcd.0: remove, state 1
[ 1319.216529] vhci_hcd: disconnect device
[ 1319.218734] vhci_hcd vhci_hcd.0: USB bus 2 deregistered[ 1319.227461] usb
usb1: USB disconnect, device number 1
[ 1319.223402] vhci_hcd vhci_hcd.0: remove, state 1[ 1319.229565] usb 1-1: USB
disconnect, device number 2
[ 1319.227461] usb usb1: USB disconnect, device number 1
[ 1319.229565] usb 1-1: USB disconnect, device number 2
Everything is still up:
# lsusb
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 05ba:000a DigitalPersona, Inc. Fingerprint Reader
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# lsmod
Module Size Used by
vhci_hcd 28672 -1
usbip_core 16384 1 vhci_hcd
vhci driver is not answering:
# usbip port
libusbip: error: udev_device_new_from_subsystem_sysname failed
usbip: error: open vhci_driver
usbip: error: list imported devices
Shutting down kvm machine will hang, as Shuah points out (sorry, I think I
never told you about that).
I don't come up with any more detail... anything I'm missing?
Regards,
Juan
Juan Antonio Zea Herranz
Proyectos y consultoría | Qindel Group
E: [email protected]
T: +34 91 766 24 21
M: +34 637 74 63 09
W: qindel.com
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html