Control virtqueue is used by networking device for accepting various commands from the driver. It's a must to support multiqueue and other configurations.
Shadow VirtQueue (SVQ) [1] already makes possible migration of virtqueue states, effectively intercepting them so qemu can track what regions of memory are dirty because device action and needs migration. However, this does not solve networking device state seen by the driver because CVQ messages, like changes on MAC addresses from the driver. To solve that, this series uses SVQ infraestructure proposed at SVQ [1] to intercept networking control messages used by the device. This way, qemu is able to update VirtIONet device model and to migrate it. This series needs to be applied on top of [1]. Ideally, only the control VQ would be shadowed for all the run of qemu and the rest of virtqueues would be passthrough unless it's migration time. However, this requires the vDPA device to support address translations from more than one address space, something that is not possible at the moment with the current vhost-vDPA API. The API change has been proposed at [2], but use of it is left for future series. Sending this as a RFC so some details like error control is still not 100% tested. Comments are welcomed on every aspect of the patch. [1] https://lore.kernel.org/qemu-devel/20220121202733.404989-1-epere...@redhat.com/ [2] https://lkml.org/lkml/2020/9/23/1243 Eugenio Pérez (9): virtio-net: Expose ctrl virtqueue logic vdpa: Extract get geatures part from vhost_vdpa_get_max_queue_pairs virtio: Make virtqueue_alloc_element non-static vhost: Add SVQElement vhost: Add custom used buffer callback vdpa: Add map/unmap operation callback to SVQ vhost: Add vhost_svq_inject vhost: Add vhost_svq_start_op vdpa: control virtqueue support on shadow virtqueue hw/virtio/vhost-shadow-virtqueue.h | 25 +++- include/hw/virtio/vhost-vdpa.h | 2 + include/hw/virtio/virtio-net.h | 3 + include/hw/virtio/virtio.h | 1 + hw/net/virtio-net.c | 83 ++++++----- hw/virtio/vhost-shadow-virtqueue.c | 217 +++++++++++++++++++++++------ hw/virtio/vhost-vdpa.c | 22 ++- hw/virtio/virtio.c | 2 +- net/vhost-vdpa.c | 140 +++++++++++++++++-- 9 files changed, 405 insertions(+), 90 deletions(-) -- 2.27.0