Il 17/09/2013 11:56, Paolo Bonzini ha scritto: > Yes. do_pci_unregister_device marks the point where the guest will not > be able to submit new requests to the device, but there may be previous > requests pending. because you could have something like this:
Michael pointed out offlist that the previous example involved the address_space_map bounce buffer. Here is a simpler one that doesn't rely on it: VCPU 1 VCPU 2 ---------------------------------------------------- start asynchronous I/O pci_dma_sglist_init object_ref ** releases BQL eject device object_unparent my_device_exit memory_region_del_subregion ** cannot yet destroy!! ** address_space_unmap will use it ** gets BQL again asynchronous I/O ends qemu_sglist_destroy object_unref instance_finalize Paolo