This series enable vDPA software assisted live migration for vhost-net devices. This is a new method of vhost devices 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 vring to the device to read and write into, and disable vhost notifiers, processing guest and vhost notifications in qemu. 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 series is a POC doing SW LM for vhost-net devices, which already have dirty page logging capabilities. None of the changes have actual effect with current devices until last two patches (26 and 27) are applied, but they can be rebased on top of any other. These checks the device to meet all requirements, and disable vhost-net devices logging so migration goes through SW LM. This last patch is not meant to be applied in the final revision, it is in the series just for testing purposes. For use SW assisted LM these vhost-net devices need to be instantiated: * With IOMMU (iommu_platform=on,ats=on) * Without event_idx (event_idx=off) Just the notification forwarding (with no descriptor relay) can be achieved with patches 7 and 9, and starting migration. Partial applies between 13 and 24 will not work while migrating on source, and patch 25 is needed for the destination to resume network activity. It is based on the ideas of DPDK SW assisted LM, in the series of DPDK's https://patchwork.dpdk.org/cover/48370/ . Comments are welcome. Thanks! Eugenio Pérez (27): vhost: Add vhost_dev_can_log vhost: Add device callback in vhost_migration_log vhost: Move log resize/put to vhost_dev_set_log vhost: add vhost_kernel_set_vring_enable vhost: Add hdev->dev.sw_lm_vq_handler virtio: Add virtio_queue_get_used_notify_split vhost: Route guest->host notification through qemu vhost: Add a flag for software assisted Live Migration vhost: Route host->guest notification through qemu vhost: Allocate shadow vring virtio: const-ify all virtio_tswap* functions virtio: Add virtio_queue_full vhost: Send buffers to device virtio: Remove virtio_queue_get_used_notify_split vhost: Do not invalidate signalled used virtio: Expose virtqueue_alloc_element vhost: add vhost_vring_set_notification_rcu vhost: add vhost_vring_poll_rcu vhost: add vhost_vring_get_buf_rcu vhost: Return used buffers vhost: Add vhost_virtqueue_memory_unmap vhost: Add vhost_virtqueue_memory_map vhost: unmap qemu's shadow virtqueues on sw live migration vhost: iommu changes vhost: Do not commit vhost used idx on vhost_virtqueue_stop vhost: Add vhost_hdev_can_sw_lm vhost: forbid vhost devices logging hw/virtio/vhost-sw-lm-ring.h | 39 +++ include/hw/virtio/vhost.h | 5 + include/hw/virtio/virtio-access.h | 8 +- include/hw/virtio/virtio.h | 4 + hw/net/virtio-net.c | 39 ++- hw/virtio/vhost-backend.c | 29 ++ hw/virtio/vhost-sw-lm-ring.c | 268 +++++++++++++++++++ hw/virtio/vhost.c | 431 +++++++++++++++++++++++++----- hw/virtio/virtio.c | 18 +- hw/virtio/meson.build | 2 +- 10 files changed, 758 insertions(+), 85 deletions(-) create mode 100644 hw/virtio/vhost-sw-lm-ring.h create mode 100644 hw/virtio/vhost-sw-lm-ring.c -- 2.18.4