This series enable vhost (And vhost-vdpa) notifications forwarding for software assisted live migration, implemented through a shadow virtqueue.
Shadow virtqueue is a new method of tracking memory for migration: Instead of relay on vDPA device's dirty logging capability, SW assisted LM intercepts dataplane, forwarding the descriptors between VM and device. In this migration mode, qemu offers a new (shadow) vring to the device to read and write into, and forwards descriptors between host vring and qemu one. On used buffer relay, qemu will mark the dirty memory as with plain virtio-net devices. This way, devices does not need to have dirty page logging capability. This RFC series just enables just the notifications forwarding part, not buffer forwarding/tracking. It is based on the ideas of DPDK SW assisted LM, in the series of DPDK's https://patchwork.dpdk.org/cover/48370/ , but will use memory in qemu Virtual Address Space for rings, instead of in guest's. Main changes from previous RFC [1] are: * Use QMP to enable. Can disable through QMP too. * Do not use vhost_dev_{enable,disable}_notifiers, since they override the VM ioeventfd set, and could cause race conditions. Do never modify irqfd or ioeventfd used for the guest. Comments are welcome. Thanks! [1] https://patchew.org/QEMU/20201120185105.279030-1-epere...@redhat.com/ Eugenio Pérez (10): virtio: Add virtqueue_set_handler virtio: Add set_vq_handler virtio: Add virtio_queue_get_idx virtio: Add virtio_queue_host_notifier_status vhost: Add vhost_dev_from_virtio vhost: Save masked_notifier state vhost: Add VhostShadowVirtqueue vhost: Add x-vhost-enable-shadow-vq qmp vhost: Route guest->host notification through shadow virtqueue vhost: Route host->guest notification through shadow virtqueue qapi/net.json | 23 +++ hw/virtio/vhost-shadow-virtqueue.h | 31 ++++ include/hw/virtio/vhost.h | 6 + include/hw/virtio/virtio.h | 14 +- hw/net/virtio-net.c | 26 ++++ hw/virtio/vhost-shadow-virtqueue.c | 234 +++++++++++++++++++++++++++++ hw/virtio/vhost.c | 161 ++++++++++++++++++++ hw/virtio/virtio.c | 24 +++ hw/virtio/meson.build | 2 +- 9 files changed, 517 insertions(+), 4 deletions(-) create mode 100644 hw/virtio/vhost-shadow-virtqueue.h create mode 100644 hw/virtio/vhost-shadow-virtqueue.c -- 2.27.0