qemu/hw
Michael Roth f7b879e072 qdev: defer DEVICE_DEL event until instance_finalize()
DEVICE_DEL is currently emitted when a Device is unparented, as
opposed to when it is finalized. The main design motivation for this
seems to be that after unparent()/unrealize(), the Device is no
longer visible to the guest, and thus the operation is complete
from the perspective of management.

However, there are cases where remaining host-side cleanup is also
pertinent to management. The is generally handled by treating these
resources as aspects of the "backend", which can be managed via
separate interfaces/events, such as blockdev_add/del, netdev_add/del,
object_add/del, etc, but some devices do not have this level of
compartmentalization, namely vfio-pci, and possibly to lend themselves
well to it.

In the case of vfio-pci, the "backend" cleanup happens as part of
the finalization of the vfio-pci device itself, in particular the
cleanup of the VFIO group FD. Failing to wait for this cleanup can
result in tools like libvirt attempting to rebind the device to
the host while it's still being used by VFIO, which can result in
host crashes or other misbehavior depending on the host driver.

Deferring DEVICE_DEL still affords us the ability to manage backends
explicitly, while also addressing cases like vfio-pci's, so we
implement that approach here.

An alternative proposal involving having VFIO emit a separate event
to denote completion of host-side cleanup was discussed, but the
prevailing opinion seems to be that it is not worth the added
complexity, and leaves the issue open for other Device implementations
to solve in the future.

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Reviewed-by: Greg Kurz <groug@kaod.org>
Tested-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Message-Id: <20171016222315.407-4-mdroth@linux.vnet.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-10-18 10:34:50 +02:00
..
9pfs 9pfs: check the size of transport buffer before marshaling 2017-09-20 08:48:52 +02:00
acpi tco: add trace events 2017-10-16 18:03:52 +02:00
adc STM32F2xx: Add the ADC device 2016-10-04 13:28:07 +01:00
alpha cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
arm hw/arm/xlnx-zynqmp: Mark the "xlnx, zynqmp" device with user_creatable = false 2017-10-06 16:46:47 +01:00
audio migration: pre_save return int 2017-09-27 11:35:59 +01:00
block hw/block/onenand: Remove dead code block 2017-10-06 16:28:58 +02:00
bt bt: stop the sdp memory allocation craziness 2017-08-01 17:27:33 +02:00
char s390x/3270: handle writes of arbitrary length 2017-10-06 10:53:02 +02:00
core qdev: defer DEVICE_DEL event until instance_finalize() 2017-10-18 10:34:50 +02:00
cpu cpu: don't allow negative core id 2017-08-02 18:30:13 -03:00
cris cris: replace cpu_cris_init() with cpu_generic_init() 2017-09-01 11:54:24 -03:00
display migration: Route more error paths 2017-09-27 11:44:18 +01:00
dma xilinx_axidma: Convert to DEFINE_PROP_LINK 2017-09-07 13:54:51 +01:00
gpio hw/gpio/omap_gpio.c: Don't use old_mmio 2017-09-21 16:34:27 +01:00
i2c migration: pre_save return int 2017-09-27 11:35:59 +01:00
i386 pc: make sure that plugged CPUs are of the same type 2017-10-12 12:10:38 +02:00
ide ide: support reporting of rotation rate 2017-10-12 12:10:37 +02:00
input virtio-input: send rel-wheel events for wheel buttons 2017-09-29 10:36:33 +02:00
intc nvic: Add missing code for writing SHCSR.HARDFAULTPENDED bit 2017-10-06 16:46:49 +01:00
ipack ipack: Update e-mail address 2016-05-18 15:04:27 +03:00
ipmi qom: enforce readonly nature of link's check callback 2017-07-14 12:04:42 +02:00
isa hw/isa/pc87312: Mark the device with user_creatable = false 2017-09-26 09:11:23 +03:00
lm32 cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
m68k cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
mem qmp: introduce query-memory-size-summary command 2017-09-14 15:52:10 +01:00
microblaze hw: Use new memory_region_init_{ram, rom, rom_device}() functions 2017-07-14 17:59:42 +01:00
mips mips: replace cpu_mips_init() with cpu_generic_init() 2017-09-21 13:25:37 +01:00
misc macio: use object link between MACIO_IDE and MAC_DBDMA object 2017-09-27 13:05:41 +10:00
moxie cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
net migration: pre_save return int 2017-09-27 11:35:59 +01:00
nios2 nios2: replace cpu_nios2_init() with cpu_generic_init() 2017-09-01 11:54:24 -03:00
nvram pc, pci, virtio: patches queued before 2.10 2017-09-08 16:04:42 +01:00
openrisc cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
pci net: Add SunGEM device emulation as found on Apple UniNorth 2017-09-15 10:29:48 +10:00
pci-bridge hw/pci: add QEMU-specific PCI capability to the Generic PCI Express Root Port 2017-09-08 16:15:17 +03:00
pci-host migration: pre_save return int 2017-09-27 11:35:59 +01:00
pcmcia
ppc Migration pull 2017-09-27 2017-09-27 22:44:51 +01:00
s390x hw/s390x: Mark the "sclpquiesce" device with user_creatable = false 2017-10-06 10:53:02 +02:00
scsi scsi-disk: support reporting of rotation rate 2017-10-12 12:10:37 +02:00
sd hw/sd: fix out-of-bounds check for multi block reads 2017-10-06 16:46:47 +01:00
sh4 cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
smbios stubs: move smbios stubs to hw/smbios 2017-01-16 17:52:35 +01:00
sparc cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
sparc64 sun4u: use sunhme as default on-board NIC 2017-09-21 08:38:42 +01:00
ssi msf2: Add Smartfusion2 SPI controller 2017-09-21 16:36:56 +01:00
timer migration: pre_save return int 2017-09-27 11:35:59 +01:00
tpm clean-up: removed duplicate #includes 2016-10-28 18:17:24 +03:00
tricore cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
unicore32 cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
usb usb: fix host-stub.c build race 2017-10-05 11:03:25 +02:00
vfio s390x: sort some devices into categories 2017-10-06 10:53:02 +02:00
virtio migration: Route more error paths 2017-09-27 11:44:18 +01:00
watchdog watchdog: Allow setting action on the fly 2017-10-02 13:09:09 +02:00
xen xen/pt: allow QEMU to request MSI unmasking at bind time 2017-09-20 19:05:27 -07:00
xenpv xenfb: remove xen_init_display "temporary" hack 2017-07-07 11:10:03 -07:00
xtensa cpu: make cpu_generic_init() abort QEMU on error 2017-09-19 09:09:32 -03:00
Makefile.objs 9pfs: fix dependencies 2017-08-30 18:23:25 +02:00