[ 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.

Hi.

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.

Hi,

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.

Nikolay


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.

Nikolay


Can be applied on:

commit bf0e7bdeeb790bc6ba5732623be0d9ff26a5961a
Author: Peter Krempa <pkre...@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

-- 
2.23.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list




--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to