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

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

 



[ 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 <pkrempa@xxxxxxxxxx>
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@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




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





[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux