QEMU needs to intercept this queue so it can track these changes and is able to migrate the device. It can do it from 1576dbb5bbc4 ("vdpa: Add x-svq to NetdevVhostVDPAOptions"). However, to enable x-svq implies to shadow all VirtIO device's virtqueues, which will damage performance.
This series adds address space isolation, so the device and the guest communicate directly with them (passthrough) and CVQ communication is split in two: The guest communicates with QEMU and QEMU forwards the commands to the device. This series is based on [1], although each one of them adds a feature on isolation and could be merged individually once conflicts are solved. Comments are welcome. Thanks! [1] https://lists.nongnu.org/archive/html/qemu-devel/2022-07/msg03101.html Eugenio Pérez (6): linux-headers: Update kernel headers to v5.19-rc1 vdpa: Use v->shadow_vqs_enabled in vhost_vdpa_svqs_start vdpa: Allocate SVQ unconditionally vdpa: Add asid parameter to vhost_vdpa_dma_map/unmap vdpa: Store x-svq parameter in VhostVDPAState vdpa: Always start CVQ in SVQ mode include/hw/virtio/vhost-vdpa.h | 8 +- include/net/vhost-vdpa.h | 1 + include/standard-headers/asm-x86/bootparam.h | 1 + include/standard-headers/drm/drm_fourcc.h | 69 ++++++++ include/standard-headers/linux/ethtool.h | 1 + include/standard-headers/linux/input.h | 1 + include/standard-headers/linux/pci_regs.h | 1 + include/standard-headers/linux/vhost_types.h | 11 +- include/standard-headers/linux/virtio_ids.h | 14 +- linux-headers/asm-arm64/kvm.h | 27 +++ linux-headers/asm-generic/unistd.h | 4 +- linux-headers/asm-riscv/kvm.h | 20 +++ linux-headers/asm-riscv/unistd.h | 3 +- linux-headers/asm-x86/kvm.h | 11 +- linux-headers/asm-x86/mman.h | 14 -- linux-headers/linux/kvm.h | 54 +++++- linux-headers/linux/userfaultfd.h | 10 +- linux-headers/linux/vfio.h | 4 +- linux-headers/linux/vhost.h | 26 ++- hw/net/vhost_net.c | 4 + hw/virtio/vhost-vdpa.c | 64 +++---- net/vhost-vdpa.c | 166 ++++++++++++++++++- hw/virtio/trace-events | 4 +- 23 files changed, 434 insertions(+), 84 deletions(-) -- 2.31.1