在 2022/8/3 01:57, Eugenio Pérez 写道:
> CVQ of net vhost-vdpa devices can be intercepted since the work of [1]. 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.
>
> This series needs fixes [1], [2] and [3] to be applied to achieve full live
> migration.
>
> Thanks!
>
> [1] https://lists.nongnu.org/archive/html/qemu-devel/2022-07/msg02984.html
> [2] https://lists.nongnu.org/archive/html/qemu-devel/2022-07/msg03993.html
Note that the above has been merged into master.
And the series looks good overall, just some comments to make the code
easier to be read and maintained in the future.
Thanks
> [3] https://lists.nongnu.org/archive/html/qemu-devel/2022-08/msg00325.html
>
> 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 (10):
> vhost: stop transfer elem ownership in vhost_handle_guest_kick
> vhost: use SVQ element ndescs instead of opaque data for desc
> validation
> vhost: Do not depend on !NULL VirtQueueElement on vhost_svq_flush
> vdpa: Get buffers from VhostVDPAState on vhost_vdpa_net_cvq_map_elem
> vdpa: Extract vhost_vdpa_net_cvq_add from
> vhost_vdpa_net_handle_ctrl_avail
> vdpa: Make vhost_vdpa_net_cvq_map_elem accept any out sg
> vdpa: add NetClientState->load() callback
> vdpa: add net_vhost_vdpa_cvq_info NetClientInfo
> 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 | 2 +
> hw/net/vhost_net.c | 7 ++
> hw/virtio/vhost-shadow-virtqueue.c | 31 +++---
> hw/virtio/vhost-vdpa.c | 14 ---
> net/vhost-vdpa.c | 163 +++++++++++++++++++++--------
> 6 files changed, 145 insertions(+), 73 deletions(-)
>