66 lines
2.4 KiB
Diff
66 lines
2.4 KiB
Diff
|
|
From 462ece480c425ef9de419f5454ec2b7293c35e16 Mon Sep 17 00:00:00 2001
|
||
|
|
From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= <eperezma@redhat.com>
|
||
|
|
Date: Thu, 15 Dec 2022 12:31:34 +0100
|
||
|
|
Subject: [PATCH] vhost: set SVQ device call handler at SVQ start
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
By the end of this series CVQ is shadowed as long as the features
|
||
|
|
support it.
|
||
|
|
|
||
|
|
Since we don't know at the beginning of qemu running if this is
|
||
|
|
supported, move the event notifier handler setting to the start of the
|
||
|
|
SVQ, instead of the start of qemu run. This will avoid to create them if
|
||
|
|
the device does not support SVQ.
|
||
|
|
|
||
|
|
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
|
||
|
|
Acked-by: Jason Wang <jasowang@redhat.com>
|
||
|
|
Message-Id: <20221215113144.322011-3-eperezma@redhat.com>
|
||
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Signed-off-by: fangyi <eric.fangyi@huawei.com>
|
||
|
|
---
|
||
|
|
hw/virtio/vhost-shadow-virtqueue.c | 4 ++--
|
||
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-virtqueue.c
|
||
|
|
index ae443f54fe..bc12bb42f3 100644
|
||
|
|
--- a/hw/virtio/vhost-shadow-virtqueue.c
|
||
|
|
+++ b/hw/virtio/vhost-shadow-virtqueue.c
|
||
|
|
@@ -625,6 +625,7 @@ void vhost_svq_start(VhostShadowVirtqueue *svq, VirtIODevice *vdev,
|
||
|
|
{
|
||
|
|
size_t desc_size, driver_size, device_size;
|
||
|
|
|
||
|
|
+ event_notifier_set_handler(&svq->hdev_call, vhost_svq_handle_call);
|
||
|
|
svq->next_guest_avail_elem = NULL;
|
||
|
|
svq->shadow_avail_idx = 0;
|
||
|
|
svq->shadow_used_idx = 0;
|
||
|
|
@@ -681,6 +682,7 @@ void vhost_svq_stop(VhostShadowVirtqueue *svq)
|
||
|
|
g_free(svq->desc_state);
|
||
|
|
qemu_vfree(svq->vring.desc);
|
||
|
|
qemu_vfree(svq->vring.used);
|
||
|
|
+ event_notifier_set_handler(&svq->hdev_call, NULL);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
@@ -717,7 +719,6 @@ VhostShadowVirtqueue *vhost_svq_new(VhostIOVATree *iova_tree,
|
||
|
|
}
|
||
|
|
|
||
|
|
event_notifier_init_fd(&svq->svq_kick, VHOST_FILE_UNBIND);
|
||
|
|
- event_notifier_set_handler(&svq->hdev_call, vhost_svq_handle_call);
|
||
|
|
svq->iova_tree = iova_tree;
|
||
|
|
svq->ops = ops;
|
||
|
|
svq->ops_opaque = ops_opaque;
|
||
|
|
@@ -740,7 +741,6 @@ void vhost_svq_free(gpointer pvq)
|
||
|
|
VhostShadowVirtqueue *vq = pvq;
|
||
|
|
vhost_svq_stop(vq);
|
||
|
|
event_notifier_cleanup(&vq->hdev_kick);
|
||
|
|
- event_notifier_set_handler(&vq->hdev_call, NULL);
|
||
|
|
event_notifier_cleanup(&vq->hdev_call);
|
||
|
|
g_free(vq);
|
||
|
|
}
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|