This is v2 of the patch sent yesterday. In addition to including the missing vfio bits, I split it in two parts: one introducing instance_finalize (patch 2), and the second making the freeing of BARs RCU-friendly (patch 3).
With these two changes I found the error path logic a bit hard to follow. So I preceded it with patch 1, which tries to make things a little bit clearer, at least to me. VFIO is probably the device that requires the largest changes, due to the complex, highly data-driven initialization sequence. No other device can use so many dynamic data structures, because their configuration is obviously not as variable as for PCI pass-through. Paolo Paolo Bonzini (3): vfio: cleanup vfio_get_device error path, remove vfio_populate_device callback vfio: free dynamically-allocated data in instance_finalize vfio: unmap and free BAR data in instance_finalize hw/vfio/common.c | 36 ++++++++-------- hw/vfio/pci.c | 96 ++++++++++++++++++++++++++++++++++--------- include/hw/vfio/vfio-common.h | 1 - 3 files changed, 92 insertions(+), 41 deletions(-) -- 1.8.3.1