[libvirt] [PATCH v3 REBASE 2 00/12] hostdev: handle usb detach/attach on node

Dave Allan dave at dpallan.com
Tue Nov 5 20:26:08 UTC 2019

[ bah, cc'ing the list this time ]

On Tue, Nov 05, 2019 at 03:21:04PM -0500, Dave Allan wrote:
>On Fri, Nov 01, 2019 at 07:48:46AM +0000, Nikolay Shirokovskiy wrote:
>>On 31.10.2019 19:50, Dave Allan wrote:
>>>On Thu, Oct 31, 2019 at 10:40:42AM +0000, Nikolay Shirokovskiy wrote:
>>>>On 30.10.2019 23:21, Dave Allan wrote:
>>>>>On Tue, Oct 29, 2019 at 11:17:51AM +0300, Nikolay Shirokovskiy wrote:
>>>>>>Diff to v2[1] version:
>>>>>>- add 'replug' attribute for hostdev element to allow replug semantics
>>>>>>- avoid accuiring domain lock in event loop thread on udev events as
>>>>>> suggested by Peter
>>>>>>- nit picks after review by Daniel Henrique Barboza
>>>>>>* is used to mark patches that were 'Reviewed-by' by Daniel (sometimes
>>>>>> with very minor changes to take into account new replug flag).
>>>>>I did some basic testing today, and I'm seeing the device appear and disappear in the guest, which is great and much nicer than my ugly udev rule hack.  I did find what I think is a bug though: if the USB device is plugged in at domain start, unplugging it while the domain is running does not cause it to disappear, and subsqeuently replugging it into the host causes a second instance of the device to appear in the guest.
>>>>Hmm. Looks like you're using startupPolicy=optional otherwise it is not
>>>>possible to start domain without a device. But in this case the whole replug thing
>>>>is disabled and further I don't understand how the second instance of the device can appear.
>>>>If device is present at domain start then replug is in play. And I cannot reproduce the bug.
>>>I am using startupPolicy optional, and I'm seeing the device attached and detached 100% of the time.  I can start the domain with or without the device attached to the host, plug and unplug it and it appears and disappears from the guest, which is exactly the behavior I want.  My domain XML is attached.
>>did you actually see your device in guest or just some usb device? Because if domain is started without a device present on host then
>>libvirt inserts dummy device which is unusable actually. And this dummy device is kept until the end even if you plug device on node.
>Sorry to be slow responding, I wanted to confirm that I could talk to the device in the guest.  Today I wasn't able to reproduce the duplicate device in the guest.  Eerything worked as I would expect: if the device wasn't plugged into the host, it wasn't shown by lsusb in the guest.  Plugging in the device to the host caused it to appear in the guest.  If the device was shown by lsusb in the guest I was able to talk to it.
>>>I tested a few more times just now, and I saw the duplicate device appear in the guest the first time I tried, but I have not been able to reproduce it again after that.
>>>>Can you clarify on you use case?
>>>My usecase is that I'm flashing the USB device with a program running in the VM.  I keep the VM running, and when I need to reflash, I connect the device, so having the startupPolicy optional is useful.
>>>>>>Can be applied on:
>>>>>>commit bf0e7bdeeb790bc6ba5732623be0d9ff26a5961a
>>>>>>Author: Peter Krempa <pkrempa at redhat.com>
>>>>>>Date:   Thu Oct 24 15:50:50 2019 +0200
>>>>>>   util: xml: Make virXMLFormatElement void
>>>>>>[1] https://www.redhat.com/archives/libvir-list/2019-September/msg00321.html
>>>>>>Nikolay Shirokovskiy (12):
>>>>>> conf: add replug option for usb hostdev
>>>>>> qemu: track hostdev delete intention
>>>>>> *qemu: support host usb device unplug
>>>>>> *qemu: support usb hostdev plugging back
>>>>>> qemu: handle host usb device add/del udev events
>>>>>> *qemu: handle libvirtd restart after host usb device unplug
>>>>>> *qemu: handle race on device deletion and usb host device plugging
>>>>>> qemu: hotplug: update device list on device deleted event
>>>>>> *qemu: handle host usb device plug/unplug when libvirtd is down
>>>>>> *qemu: don't mess with non mandatory hostdevs on reattaching
>>>>>> qemu: handle detaching of unplugged hostdev
>>>>>> *conf: parse hostdev missing flag
>>>>>>docs/formatdomain.html.in                     |  10 +-
>>>>>>docs/schemas/domaincommon.rng                 |   5 +
>>>>>>src/conf/domain_conf.c                        |  62 +++
>>>>>>src/conf/domain_conf.h                        |  17 +
>>>>>>src/qemu/Makefile.inc.am                      |   2 +
>>>>>>src/qemu/qemu_conf.h                          |   3 +
>>>>>>src/qemu/qemu_domain.c                        |   2 +
>>>>>>src/qemu/qemu_domain.h                        |   2 +
>>>>>>src/qemu/qemu_driver.c                        | 404 +++++++++++++++++-
>>>>>>src/qemu/qemu_hotplug.c                       | 104 ++++-
>>>>>>src/qemu/qemu_hotplug.h                       |   3 +-
>>>>>>src/qemu/qemu_process.c                       |  60 +++
>>>>>>src/util/virhostdev.c                         |   2 +
>>>>>>tests/qemuhotplugtest.c                       |   2 +-
>>>>>>tests/qemuxml2argvdata/hostdev-usb-replug.xml |  36 ++
>>>>>>.../qemuxml2xmloutdata/hostdev-usb-replug.xml |  40 ++
>>>>>>tests/qemuxml2xmltest.c                       |   1 +
>>>>>>17 files changed, 733 insertions(+), 22 deletions(-)
>>>>>>create mode 100644 tests/qemuxml2argvdata/hostdev-usb-replug.xml
>>>>>>create mode 100644 tests/qemuxml2xmloutdata/hostdev-usb-replug.xml
>>>>>>libvir-list mailing list
>>>>>>libvir-list at redhat.com

More information about the libvir-list mailing list