qemu/hw
Zhenzhong Duan 2b43b2995b vfio/migration: Free resources when vfio_migration_realize fails
When vfio_realize() succeeds, hot unplug will call vfio_exitfn()
to free resources allocated in vfio_realize(); when vfio_realize()
fails, vfio_exitfn() is never called and we need to free resources
in vfio_realize().

In the case that vfio_migration_realize() fails,
e.g: with -only-migratable & enable-migration=off, we see below:

(qemu) device_add vfio-pci,host=81:11.1,id=vfio1,bus=root1,enable-migration=off
0000:81:11.1: Migration disabled
Error: disallowing migration blocker (--only-migratable) for: 0000:81:11.1: Migration is disabled for VFIO device

If we hotplug again we should see same log as above, but we see:
(qemu) device_add vfio-pci,host=81:11.1,id=vfio1,bus=root1,enable-migration=off
Error: vfio 0000:81:11.1: device is already attached

That's because some references to VFIO device isn't released.
For resources allocated in vfio_migration_realize(), free them by
jumping to out_deinit path with calling a new function
vfio_migration_deinit(). For resources allocated in vfio_realize(),
free them by jumping to de-register path in vfio_realize().

Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Fixes: a22651053b ("vfio: Make vfio-pci device migration capable")
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
2023-07-10 09:52:52 +02:00
..
9pfs 9pfs: deprecate 'proxy' backend 2023-07-06 11:42:08 +02:00
acpi hw/acpi: Fix PM control register access 2023-06-26 09:49:24 -04:00
adc meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
alpha hw/alpha: Use MachineClass->default_nic in the alpha machine 2023-05-26 09:10:49 +02:00
arm hw/arm/virt-acpi-build.c: Add missing header 2023-07-08 07:24:38 +03:00
audio meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
avr Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
block vhost-user: fully use new backend/frontend naming 2023-06-26 09:50:00 -04:00
char escc: emulate dip switch language layout settings on SUN keyboard 2023-06-28 10:54:25 +01:00
core Block layer patches 2023-06-28 17:29:53 +02:00
cpu meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
cris Do not include exec/address-spaces.h if it's not really necessary 2021-05-02 17:24:51 +02:00
cxl hw/cxl/events: Add event interrupt support 2023-06-22 18:55:14 -04:00
display virtio-gpu-virgl: use D3D11_SHARE_TEXTURE when available 2023-06-27 17:08:56 +02:00
dma meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
gpio meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
hppa target/hppa: Provide qemu version via fw_cfg to firmware 2023-06-24 13:39:48 +02:00
hyperv win32: replace closesocket() with close() wrapper 2023-03-13 15:39:31 +04:00
i2c meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
i386 exec/memory: Add symbolic value for memory listener priority for accel 2023-06-28 14:27:59 +02:00
ide meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
input vhost-user: fully use new backend/frontend naming 2023-06-26 09:50:00 -04:00
intc pnv/xive2: Always pass a presenter object when accessing the TIMA 2023-07-07 04:46:12 -03:00
ipack meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
ipmi meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
isa meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
loongarch hw: Simplify calls to pci_nic_init_nofail() 2023-07-08 07:24:38 +03:00
m68k q800: move macfb device to Q800MachineState 2023-06-22 09:30:11 +02:00
mem hw/cxl/events: Add injection of Memory Module Events 2023-06-23 02:54:40 -04:00
microblaze hw/char/xilinx_uartlite: Open-code xilinx_uartlite_create() 2023-02-27 13:27:05 +00:00
mips hw: Simplify calls to pci_nic_init_nofail() 2023-07-08 07:24:38 +03:00
misc hw: arm: allwinner-sramc: Set class_size 2023-07-06 13:26:43 +01:00
net ppc patch queue for 2023-07-07: 2023-07-07 22:23:17 +01:00
nios2 hw/nios2: set machine->fdt in nios2_load_dtb() 2022-10-17 16:15:10 -03:00
nubus meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
nvme hw/nvme: add placement handle list ranges 2023-06-28 11:22:46 +02:00
nvram meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
openrisc *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
pci pci: ROM preallocation for incoming migration 2023-06-23 02:54:44 -04:00
pci-bridge meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
pci-host mv64361: Add dummy gigabit ethernet PHY access registers 2023-07-07 04:18:26 -03:00
pcmcia meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
ppc ppc/pnv: Add QME region for P10 2023-07-07 06:32:53 -03:00
rdma meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
remote exec/memory: Add symbol for memory listener priority for device backend 2023-06-28 14:27:59 +02:00
riscv hw/riscv/virt.c: fix typo in 'aia' description 2023-07-08 07:24:38 +03:00
rtc meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
rx bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
s390x vfio: Implement a common device info helper 2023-06-30 06:02:51 +02:00
scsi virtio-scsi: avoid dangling host notifier in ->ioeventfd_stop() 2023-06-26 09:50:00 -04:00
sd meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
sensor meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
sh4 hw/sh4: Use MachineClass->default_nic in the sh4 r2d machine 2023-05-22 09:44:48 +02:00
smbios meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
sparc bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
sparc64 Revert "hw/sparc64/niagara: Use blk_name() instead of open-coding it" 2023-06-28 10:50:41 +01:00
ssi meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
timer meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
tpm meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
tricore hw/tricore: fix inclusion of tricore_testboard 2021-07-20 20:10:21 +02:00
usb meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
vfio vfio/migration: Free resources when vfio_migration_realize fails 2023-07-10 09:52:52 +02:00
virtio exec/memory: Add symbol for memory listener priority for device backend 2023-06-28 14:27:59 +02:00
watchdog meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
xen exec/memory: Add symbolic value for memory listener priority for accel 2023-06-28 14:27:59 +02:00
xenpv hw/xenpv: Initialize Xen backend operations 2023-03-24 14:52:14 +00:00
xtensa hw: Simplify calls to pci_nic_init_nofail() 2023-07-08 07:24:38 +03:00
Kconfig xen: add CONFIG_XEN_BUS and CONFIG_XEN_EMU options for Xen emulation 2023-03-01 08:22:49 +00:00
meson.build hw/loongarch: Add support loongson3 virt machine type. 2022-06-06 18:09:03 +00:00