I re-run the above, full PCI passthrough still attaches/detaches fine. VFs attach fine VFs break on detach I've thrown qemu into GDB and this is the backtrace Thread 4 "CPU 0/KVM" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7f82f0e31700 (LWP 3998)] 0x000055d2f322d45d in notifier_remove (notifier=notifier@entry=0x55d2f40c5078) at ./util/notify.c:31 31 QLIST_REMOVE(notifier, node); (gdb) bt #0 0x000055d2f322d45d in notifier_remove (notifier=notifier@entry=0x55d2f40c5078) at ./util/notify.c:31 #1 0x000055d2f2df8df9 in kvm_irqchip_remove_change_notifier (n=n@entry=0x55d2f40c5078) at ./accel/kvm/kvm-all.c:1409 #2 0x000055d2f2e56989 in vfio_exitfn (pdev=) at ./hw/vfio/pci.c:3079 #3 0x000055d2f3025c1b in pci_qdev_unrealize (dev=, errp=) at ./hw/pci/pci.c:1131 #4 0x000055d2f2f8c6e2 in device_set_realized (obj=, value=, errp=0x0) at ./hw/core/qdev.c:932 #5 0x000055d2f312449b in property_set_bool (obj=0x55d2f40c4430, v=, name=, opaque=0x55d2f4083ee0, errp=0x0) at ./qom/object.c:2078 #6 0x000055d2f3128c84 in object_property_set_qobject (obj=obj@entry=0x55d2f40c4430, value=value@entry=0x7f82dc2f7130, name=name@entry=0x55d2f330d85d "realized", errp=errp@entry=0x0) at ./qom/qom-qobject.c:26 #7 0x000055d2f31264ba in object_property_set_bool (obj=0x55d2f40c4430, value=, name=0x55d2f330d85d "realized", errp=0x0) at ./qom/object.c:1336 #8 0x000055d2f2f56bca in acpi_pcihp_device_unplug_cb (hotplug_dev=, s=, dev=0x55d2f40c4430, errp=) at ./hw/acpi/pcihp.c:269 #9 0x000055d2f2f56253 in acpi_pcihp_eject_slot (s=, bsel=, slots=slots@entry=256) at ./hw/acpi/pcihp.c:170 #10 0x000055d2f2f56383 in pci_write (size=, data=256, addr=8, opaque=) at ./hw/acpi/pcihp.c:341 #11 pci_write (opaque=, addr=, data=256, size=) at ./hw/acpi/pcihp.c:332 #12 0x000055d2f2de9cfb in memory_region_write_accessor (mr=mr@entry=0x55d2f4780970, addr=8, value=value@entry=0x7f82f0e304f8, size=size@entry=4, shift=, mask=mask@entry=4294967295, attrs=...) at ./memory.c:483 #13 0x000055d2f2de79ee in access_with_adjusted_size (addr=addr@entry=8, value=value@entry=0x7f82f0e304f8, size=size@entry=4, access_size_min=, access_size_max=, access_fn=access_fn@entry=0x55d2f2de9bd0 , mr=0x55d2f4780970, attrs=...) at ./memory.c:544 #14 0x000055d2f2debfc3 in memory_region_dispatch_write (mr=mr@entry=0x55d2f4780970, addr=8, data=, op=, attrs=attrs@entry=...) at ./memory.c:1475 #15 0x000055d2f2d96a30 in flatview_write_continue (fv=fv@entry=0x7f82dc14bbc0, addr=addr@entry=44552, attrs=..., buf=buf@entry=0x7f82f17e9000 "", len=len@entry=4, addr1=, l=, mr=0x55d2f4780970) at ./include/qemu/host-utils.h:164 #16 0x000055d2f2d96c46 in flatview_write (fv=0x7f82dc14bbc0, addr=44552, attrs=..., buf=0x7f82f17e9000 "", len=4) at ./exec.c:3169 #17 0x000055d2f2d9b01f in address_space_write (as=as@entry=0x55d2f3956960 , addr=addr@entry=44552, attrs=..., buf=, len=len@entry=4) at ./exec.c:3259 #18 0x000055d2f2d9b09e in address_space_rw (as=as@entry=0x55d2f3956960 , addr=addr@entry=44552, attrs=..., attrs@entry=..., buf=, len=len@entry=4, is_write=is_write@entry=true) at ./exec.c:3269 #19 0x000055d2f2dfc94f in kvm_handle_io (count=1, size=4, direction=, data=, attrs=..., port=44552) at ./accel/kvm/kvm-all.c:2104 #20 kvm_cpu_exec (cpu=cpu@entry=0x55d2f3dc9090) at ./accel/kvm/kvm-all.c:2350 #21 0x000055d2f2dde53e in qemu_kvm_cpu_thread_fn (arg=0x55d2f3dc9090) at ./cpus.c:1318 #22 qemu_kvm_cpu_thread_fn (arg=arg@entry=0x55d2f3dc9090) at ./cpus.c:1290 #23 0x000055d2f321fe13 in qemu_thread_start (args=) at ./util/qemu-thread-posix.c:519 #24 0x00007f82f4290609 in start_thread (arg=) at pthread_create.c:477 #25 0x00007f82f41b7153 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95