[libvirt] [PATCH 0/6] hostdev: handle usb detach/attach on node
Nikolay Shirokovskiy
nshirokovskiy at virtuozzo.com
Wed Sep 4 06:51:08 UTC 2019
On 03.09.2019 22:40, Daniel Henrique Barboza wrote:
> Hi Nikolay,
>
> I was going to review these patches but first I followed up in the
> discussions at [1]. Daniel made a few points there:
>
> ---
> The problems around host USB device passthrough are conceptually similar
> to the problems of hots PCI device passthrough.
>
> In both cases we cannot assume the device present on the source device
> exists on the target device in the same way.
> (...)
> For PCI devices we simply refuse to initiate the migration if any host
> PCI devices are attached. The mgmt app has to hot-unplug all devices
> before migration, and hot-plug new devices after migration if desired.
>
> I'm inclined to suggest that same approach of hotunplug + hotplug either
> side of migration is the only viable option for host USB devices too.
> (...)
> ---
>
> My question: is this patch series still alive? Seems to me that you made
> these changes based at least partially with migration in mind, and
> the migration solution Libvirt adopted is to rely on upper management
> to detach/reattach hostdev devices prior/before migration.
Hi, Daniel.
I'm going to send 2nd version of the patchset without using dummy device
as suggested by Dan.
Nikolay
>
>
> Thanks,
>
>
> DHB
>
>
> On 8/30/19 9:08 AM, Nikolay Shirokovskiy wrote:
>> Hi, all.
>>
>> This patch series aims to handle case when hostdev usb is detached and then
>> attached back on node. Currently libvirtd does not track these events so that in
>> the result hostdev usb is not usable.
>>
>> On the first glace it make sense to delete device from qemu when hostdev is
>> detached on node and then add device back when hostdev is attached back. But
>> these series adds a different behaviour. On detaching device is deleted from
>> qemu and dummy (missing hostaddr and hostbus values) hostdev is inserted, then
>> on attaching device on node dummy device is deleted and proper one is inserted.
>> This way we have the same semantics of 'missing' flag for hostdev as in case of
>> hostdev missing on startup/migration to different host. Also with such
>> approach we additionally handle cases when hostdev is missing on startup but
>> later is attached to node.
>>
>> Known issues:
>>
>> The last patch tries to handle case when hostdev attached/detached when
>> libvirtd is down but if fails in one scenario. If hostdev is detached and thus
>> dummy device in inserted in qemu then if libvirtd is down and hostdev is
>> attached to node then qemu tries to bind appeared hostdev to the dummy device
>> but fails as device is missing in qemu's mount namespace. Later when libvirtd
>> is up and tries to replace dummy device with actual one the device_add fails
>> because libusb the qemu uses tracks that deviced was missed ealier. For this
>> reason I proposed to get rid of dummy device in RFC [1]. Alternatively libusb
>> can be fixed.
>>
>> [1] https://www.redhat.com/archives/libvir-list/2019-August/msg01396.html
>>
>> Nikolay Shirokovskiy (6):
>> qemu: track hostdev delete cause
>> qemu: handle usb hostdev add/del udev events
>> qemu: handle usb hostdev add/del on device DELETED_EVENT
>> conf: parse hostdev missing flag
>> qemu: handle libvirtd restarts during hostdev reattaching
>> qemu: handle hostdev add/del when libvirtd is down
>>
>> src/conf/domain_conf.c | 32 ++++
>> src/conf/domain_conf.h | 10 ++
>> 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 | 376 +++++++++++++++++++++++++++++++++++++--
>> src/qemu/qemu_hotplug.c | 94 ++++++++--
>> src/qemu/qemu_hotplug.h | 7 +-
>> src/qemu/qemu_process.c | 55 +++++-
>> src/util/virhostdev.c | 6 +-
>> tests/qemuhotplugtest.c | 2 +-
>> 12 files changed, 558 insertions(+), 33 deletions(-)
>>
>
More information about the libvir-list
mailing list