thebeanogamer / rpms / qemu-kvm

Forked from rpms/qemu-kvm 5 months ago
Clone

Blame SOURCES/kvm-vhost-set-SVQ-device-call-handler-at-SVQ-start.patch

ed5979
From 2906f8df3c5e915a3dc05a705b87990211f114b5 Mon Sep 17 00:00:00 2001
ed5979
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
ed5979
Date: Thu, 15 Dec 2022 12:31:34 +0100
ed5979
Subject: [PATCH 02/14] vhost: set SVQ device call handler at SVQ start
ed5979
MIME-Version: 1.0
ed5979
Content-Type: text/plain; charset=UTF-8
ed5979
Content-Transfer-Encoding: 8bit
ed5979
ed5979
RH-Author: Eugenio Pérez <eperezma@redhat.com>
ed5979
RH-MergeRequest: 136: vDPA ASID support in Qemu
ed5979
RH-Bugzilla: 2104412
ed5979
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
ed5979
RH-Acked-by: Cindy Lu <lulu@redhat.com>
ed5979
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
ed5979
RH-Commit: [2/13] ad90a6cc5c71b70d705904433d5a986e8fedb924 (eperezmartin/qemu-kvm)
ed5979
ed5979
By the end of this series CVQ is shadowed as long as the features
ed5979
support it.
ed5979
ed5979
Since we don't know at the beginning of qemu running if this is
ed5979
supported, move the event notifier handler setting to the start of the
ed5979
SVQ, instead of the start of qemu run. This will avoid to create them if
ed5979
the device does not support SVQ.
ed5979
ed5979
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
ed5979
Acked-by: Jason Wang <jasowang@redhat.com>
ed5979
Message-Id: <20221215113144.322011-3-eperezma@redhat.com>
ed5979
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
ed5979
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
ed5979
(cherry picked from commit 20e7412bfd63c68f1798fbdb799aedb7e05fee88)
ed5979
---
ed5979
 hw/virtio/vhost-shadow-virtqueue.c | 4 ++--
ed5979
 1 file changed, 2 insertions(+), 2 deletions(-)
ed5979
ed5979
diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c
ed5979
index 5bd14cad96..264ddc166d 100644
ed5979
--- a/hw/virtio/vhost-shadow-virtqueue.c
ed5979
+++ b/hw/virtio/vhost-shadow-virtqueue.c
ed5979
@@ -648,6 +648,7 @@ void vhost_svq_start(VhostShadowVirtqueue *svq, VirtIODevice *vdev,
ed5979
 {
ed5979
     size_t desc_size, driver_size, device_size;
ed5979
 
ed5979
+    event_notifier_set_handler(&svq->hdev_call, vhost_svq_handle_call);
ed5979
     svq->next_guest_avail_elem = NULL;
ed5979
     svq->shadow_avail_idx = 0;
ed5979
     svq->shadow_used_idx = 0;
ed5979
@@ -704,6 +705,7 @@ void vhost_svq_stop(VhostShadowVirtqueue *svq)
ed5979
     g_free(svq->desc_state);
ed5979
     qemu_vfree(svq->vring.desc);
ed5979
     qemu_vfree(svq->vring.used);
ed5979
+    event_notifier_set_handler(&svq->hdev_call, NULL);
ed5979
 }
ed5979
 
ed5979
 /**
ed5979
@@ -740,7 +742,6 @@ VhostShadowVirtqueue *vhost_svq_new(VhostIOVATree *iova_tree,
ed5979
     }
ed5979
 
ed5979
     event_notifier_init_fd(&svq->svq_kick, VHOST_FILE_UNBIND);
ed5979
-    event_notifier_set_handler(&svq->hdev_call, vhost_svq_handle_call);
ed5979
     svq->iova_tree = iova_tree;
ed5979
     svq->ops = ops;
ed5979
     svq->ops_opaque = ops_opaque;
ed5979
@@ -763,7 +764,6 @@ void vhost_svq_free(gpointer pvq)
ed5979
     VhostShadowVirtqueue *vq = pvq;
ed5979
     vhost_svq_stop(vq);
ed5979
     event_notifier_cleanup(&vq->hdev_kick);
ed5979
-    event_notifier_set_handler(&vq->hdev_call, NULL);
ed5979
     event_notifier_cleanup(&vq->hdev_call);
ed5979
     g_free(vq);
ed5979
 }
ed5979
-- 
ed5979
2.31.1
ed5979