This way QMP command can iterate through them and find the devices it needs to enable shadow virtqueue in.
Signed-off-by: Eugenio Pérez <epere...@redhat.com> --- include/hw/virtio/vhost-vdpa.h | 2 ++ hw/virtio/vhost-vdpa.c | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/include/hw/virtio/vhost-vdpa.h b/include/hw/virtio/vhost-vdpa.h index 9188226d8b..0d565bb5bd 100644 --- a/include/hw/virtio/vhost-vdpa.h +++ b/include/hw/virtio/vhost-vdpa.h @@ -12,6 +12,7 @@ #ifndef HW_VIRTIO_VHOST_VDPA_H #define HW_VIRTIO_VHOST_VDPA_H +#include "qemu/queue.h" #include "hw/virtio/virtio.h" typedef struct VhostVDPAHostNotifier { @@ -24,6 +25,7 @@ typedef struct vhost_vdpa { uint32_t msg_type; MemoryListener listener; struct vhost_dev *dev; + QLIST_ENTRY(vhost_vdpa) entry; VhostVDPAHostNotifier notifier[VIRTIO_QUEUE_MAX]; } VhostVDPA; diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c index c63e311d7c..e0dc7508c3 100644 --- a/hw/virtio/vhost-vdpa.c +++ b/hw/virtio/vhost-vdpa.c @@ -26,6 +26,9 @@ #include "qapi/qapi-commands-net.h" #include "qapi/error.h" +static QLIST_HEAD(, vhost_vdpa) vhost_vdpa_devices = + QLIST_HEAD_INITIALIZER(vhost_vdpa_devices); + static bool vhost_vdpa_listener_skipped_section(MemoryRegionSection *section) { return (!memory_region_is_ram(section->mr) && @@ -280,6 +283,7 @@ static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp) dev->opaque = opaque ; v->listener = vhost_vdpa_memory_listener; v->msg_type = VHOST_IOTLB_MSG_V2; + QLIST_INSERT_HEAD(&vhost_vdpa_devices, v, entry); vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE | VIRTIO_CONFIG_S_DRIVER); @@ -377,6 +381,7 @@ static int vhost_vdpa_cleanup(struct vhost_dev *dev) trace_vhost_vdpa_cleanup(dev, v); vhost_vdpa_host_notifiers_uninit(dev, dev->nvqs); memory_listener_unregister(&v->listener); + QLIST_REMOVE(v, entry); dev->opaque = NULL; return 0; -- 2.27.0