This series (partially) fixes a longstanding bug in device unplug from a live domain. We considered the QEMU command used for that to be synchronous and removed the unplugged device from domain definition immediately after the command returned success. This is OK for USB devices but other devices actually need guest cooperation to be unplugged and thus they are actually unplugged asynchronously and QEMU tells us about that using DEVICE_DELETED event. This series is not complete, it does not check if any device finished unplug while libvirtd was not running. I'm working on that part but I wanted to get some feedback on this series as soon as possible. Path 3/12 explains how I decided to deal with backward compatibility of the virDomainDetachDeviceFlags API. No libvirt client/app should see any real difference in behavior after this series unless they want to. Jiri Denemark (12): Add VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED event examples: Handle VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED event Clarify virDomainDetachDeviceFlags documentation qemu: Add qemuDomainReleaseDeviceAddress to remove any address qemu: Separate disk device removal into a standalone function qemu: Separate controller removal into a standalone function qemu: Separate net device removal into a standalone function qemu: Separate host device removal into a standalone function Add virDomainDefFindDevice for looking up a device by its alias qemu: Add support for DEVICE_DELETED event qemu: Remove devices only after DEVICE_DELETED event qemu: Emit VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED events daemon/remote.c | 32 + examples/domain-events/events-c/event-test.c | 23 +- examples/domain-events/events-python/event-test.py | 4 + include/libvirt/libvirt.h.in | 18 + python/libvirt-override-virConnect.py | 9 + python/libvirt-override.c | 52 +- src/conf/domain_conf.c | 41 ++ src/conf/domain_conf.h | 4 + src/conf/domain_event.c | 85 ++- src/conf/domain_event.h | 5 + src/libvirt.c | 12 + src/libvirt_private.syms | 3 + src/qemu/qemu_capabilities.c | 2 + src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 35 +- src/qemu/qemu_command.h | 8 +- src/qemu/qemu_domain.h | 2 + src/qemu/qemu_driver.c | 31 +- src/qemu/qemu_hotplug.c | 660 ++++++++++++--------- src/qemu/qemu_hotplug.h | 7 +- src/qemu/qemu_monitor.c | 13 + src/qemu/qemu_monitor.h | 5 + src/qemu/qemu_monitor_json.c | 15 + src/qemu/qemu_process.c | 41 ++ src/remote/remote_driver.c | 32 + src/remote/remote_protocol.x | 13 +- src/remote_protocol-structs | 5 + 27 files changed, 847 insertions(+), 311 deletions(-) -- 1.8.3.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list