在 2022/8/24 02:30, Eugenio Pérez 写道:
> CVQ of net vhost-vdpa devices can be intercepted since the addition of x-svq.
> The virtio-net device model is updated. The migration was blocked because
> although the state can be megrated between VMM it was not possible to restore
> on the destination NIC.
>
> This series add support for SVQ to inject external messages without the guest's
> knowledge, so before the guest is resumed all the guest visible state is
> restored. It is done using standard CVQ messages, so the vhost-vdpa device does
> not need to learn how to restore it: As long as they have the feature, they
> know how to handle it.
>
> Depending on the device, this series may need fixes with message id [1] to
> achieve full live migration.
>
> [1] <20220823182008.97141-1-eperezma@redhat.com>
I've queued the two series in net-next branch:
https://github.com/jasowang/qemu/commits/net-next
Thanks
>
> v10:
> - Rebase on latest fixes of [1].
>
> v9:
> - Use guest acked features instead of device's.
> - Minors: fix typos and patch messages, constify vhost_vdpa and VirtIONet vars,
> delete unneeded increment of cursor.
>
> v8:
> - Rename NetClientInfo load to start, so is symmetrical with stop()
> - Delete copy of device's in buffer at vhost_vdpa_net_load
>
> v7:
> - Remove accidental double free.
>
> v6:
> - Move map and unmap of the buffers to the start and stop of the device. This
> implies more callbacks on NetClientInfo, but simplifies the SVQ CVQ code.
> - Not assume that in buffer is sizeof(virtio_net_ctrl_ack) in
> vhost_vdpa_net_cvq_add
> - Reduce the number of changes from previous versions
> - Delete unused memory barrier
>
> v5:
> - Rename s/start/load/
> - Use independent NetClientInfo to only add load callback on cvq.
> - Accept out sg instead of dev_buffers[] at vhost_vdpa_net_cvq_map_elem
> - Use only out size instead of iovec dev_buffers to know if the descriptor is
> effectively available, allowing to delete artificial !NULL VirtQueueElement
> on vhost_svq_add call.
>
> v4:
> - Actually use NetClientInfo callback.
>
> v3:
> - Route vhost-vdpa start code through NetClientInfo callback.
> - Delete extra vhost_net_stop_one() call.
>
> v2:
> - Fix SIGSEGV dereferencing SVQ when not in svq mode
>
> v1 from RFC:
> - Do not reorder DRIVER_OK & enable patches.
> - Delete leftovers
>
> Eugenio Pérez (12):
> vhost: stop transfer elem ownership in vhost_handle_guest_kick
> vhost: use SVQ element ndescs instead of opaque data for desc
> validation
> vhost: Delete useless read memory barrier
> vhost: Do not depend on !NULL VirtQueueElement on vhost_svq_flush
> vhost_net: Add NetClientInfo start callback
> vhost_net: Add NetClientInfo stop callback
> vdpa: add net_vhost_vdpa_cvq_info NetClientInfo
> vdpa: Move command buffers map to start of net device
> vdpa: extract vhost_vdpa_net_cvq_add from
> vhost_vdpa_net_handle_ctrl_avail
> vhost_net: add NetClientState->load() callback
> vdpa: Add virtio-net mac address via CVQ at start
> vdpa: Delete CVQ migration blocker
>
> include/hw/virtio/vhost-vdpa.h | 1 -
> include/net/net.h | 6 +
> hw/net/vhost_net.c | 17 +++
> hw/virtio/vhost-shadow-virtqueue.c | 27 ++--
> hw/virtio/vhost-vdpa.c | 15 --
> net/vhost-vdpa.c | 224 ++++++++++++++++++-----------
> 6 files changed, 177 insertions(+), 113 deletions(-)
>