summary refs log tree commit diff stats
path: root/results/scraper/launchpad/1586611
blob: 061f76f0b80ce874ecde7cc6856d5f7d88a34f76 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
usb-hub can not be detached when detach usb  device from VM

I give a host usb device to guest in the way of passthrough,use "virsh attach-device" cmd. In guest os,use "lsusb" cmd I can see two devices have been added,one is usb device and the other is usb-hub(0409:55aa NEC Corp. Hub).
when I use "virsh detach-device" detach the usb device,in guest os the usb-hub was still exists.
It can create a bad impression when operating the VM,for example,suspend and resume the VM,qemu would report that:

2016-05-24T12:03:54.434369Z qemu-kvm: Unknown savevm section or instance '0000:00:01.2/2/usb-hub' 0

2016-05-24T12:03:54.434742Z qemu-kvm: load of migration failed: Invalid argument  

From qemu's code,it can be sure that the usb-hub is generated by qemu,and the process of detaching usb-hub has already been executed,but failed.With adding print information,error as follows:
libusbx: error [do_close] Device handle closed while transfer was still being processed, but the device is still connected as far as we know
libusbx: warning [do_close] A cancellation for an in-flight transfer hasn't completed but closing the device handle

I found that when I attached an usb device to the VM, the VM would add an usb-hub automatically if there was no usb-hub.
After adding an usb-hub,the VM assigned a port to the actual usb device. When detaching the usb device,the qemu only detach the port,without detaching the usb-hub.So when doing action like migrating or suspending/resumming,the VM will fail. 

Try detach the usb-hub device by the virsh detach-device usb-hub.xml?

Of course using virtual usb controller is normal,The situation of the problems is to use the passthrough usb devices

The usb-hub device should be deleted when the usb device was detached. When do you fix this bug?

Use a newer libvirt version which manages usb addressing and assigns usb devices to usb ports.  This is required to make sure the physical device tree is the same after vmsave/vmload or live migration.