vhost: set SVQ device call handler at SVQ start
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>
This commit is contained in:
parent
712c1a3171
commit
20e7412bfd
@ -648,6 +648,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;
|
||||
@ -704,6 +705,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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -740,7 +742,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;
|
||||
@ -763,7 +764,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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user