qemu-e2k/hw/vfio
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
..
amd-xgbe.c
ap.c target/s390x: move kvm files into kvm/ 2021-07-07 14:01:59 +02:00
calxeda-xgmac.c
ccw.c hw/vfio/ccw: Replace DO_UPCAST(VFIOCCWDevice) by VFIO_CCW() 2023-02-27 09:15:38 +01:00
common.c vfio/migration: Change vIOMMU blocker from global to per device 2023-07-10 09:52:52 +02:00
display.c *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
igd.c *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
Kconfig
meson.build
migration.c vfio/migration: Free resources when vfio_migration_realize fails 2023-07-10 09:52:52 +02:00
pci-quirks.c hw/vfio/pci-quirks: Sanitize capability pointer 2023-07-10 09:52:52 +02:00
pci.c vfio/migration: Free resources when vfio_migration_realize fails 2023-07-10 09:52:52 +02:00
pci.h vfio/pci: add support for VF token 2023-05-09 09:30:13 -06:00
platform.c Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
spapr.c Replace qemu_real_host_page variables with inlined functions 2022-04-06 10:50:38 +02:00
trace-events vfio/migration: Make VFIO migration non-experimental 2023-06-30 06:02:51 +02:00
trace.h