forked from rpms/qemu-kvm
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
4.6 KiB
118 lines
4.6 KiB
9 months ago
|
From 71257c2f320f1511de1e275779cf4b90effc1f02 Mon Sep 17 00:00:00 2001
|
||
|
From: Stefan Hajnoczi <stefanha@redhat.com>
|
||
|
Date: Fri, 19 Jan 2024 08:57:44 -0500
|
||
|
Subject: [PATCH 15/22] virtio-blk: rename dataplane create/destroy functions
|
||
|
|
||
|
RH-Author: Stefan Hajnoczi <stefanha@redhat.com>
|
||
|
RH-MergeRequest: 219: virtio-blk: add iothread-vq-mapping parameter
|
||
|
RH-Jira: RHEL-17369 RHEL-20764 RHEL-7356
|
||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||
|
RH-Acked-by: Hanna Czenczek <hreitz@redhat.com>
|
||
|
RH-Commit: [11/17] 60e7016d5f3e4e9e89945578279b12f812f85ddf (stefanha/centos-stream-qemu-kvm)
|
||
|
|
||
|
virtio_blk_data_plane_create() and virtio_blk_data_plane_destroy() are
|
||
|
actually about s->vq_aio_context[] rather than managing
|
||
|
dataplane-specific state.
|
||
|
|
||
|
As a prerequisite to using s->vq_aio_context[] in all code paths (even
|
||
|
when dataplane is not used), rename these functions to reflect that they
|
||
|
just manage s->vq_aio_context and call them regardless of whether or not
|
||
|
dataplane is in use.
|
||
|
|
||
|
Note that virtio-blk supports running with -device
|
||
|
virtio-blk-pci,ioevent=off where the vCPU thread enters the device
|
||
|
emulation code. In this mode ioeventfd is not used for virtqueue
|
||
|
processing. However, we still want to initialize s->vq_aio_context[] to
|
||
|
qemu_aio_context in that case since I/O completion callbacks will be
|
||
|
invoked in the main loop thread.
|
||
|
|
||
|
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||
|
Message-ID: <20240119135748.270944-3-stefanha@redhat.com>
|
||
|
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
|
||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||
|
(cherry picked from commit 57bc2658935778d1ae0edbcd4402763da8c7bae2)
|
||
|
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||
|
---
|
||
|
hw/block/virtio-blk.c | 23 ++++++++++++-----------
|
||
|
1 file changed, 12 insertions(+), 11 deletions(-)
|
||
|
|
||
|
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
|
||
|
index cb623069f8..4d6f9377c6 100644
|
||
|
--- a/hw/block/virtio-blk.c
|
||
|
+++ b/hw/block/virtio-blk.c
|
||
|
@@ -1608,7 +1608,7 @@ apply_vq_mapping(IOThreadVirtQueueMappingList *iothread_vq_mapping_list,
|
||
|
IOThread *iothread = iothread_by_id(node->value->iothread);
|
||
|
AioContext *ctx = iothread_get_aio_context(iothread);
|
||
|
|
||
|
- /* Released in virtio_blk_data_plane_destroy() */
|
||
|
+ /* Released in virtio_blk_vq_aio_context_cleanup() */
|
||
|
object_ref(OBJECT(iothread));
|
||
|
|
||
|
if (node->value->vqs) {
|
||
|
@@ -1631,7 +1631,7 @@ apply_vq_mapping(IOThreadVirtQueueMappingList *iothread_vq_mapping_list,
|
||
|
}
|
||
|
|
||
|
/* Context: BQL held */
|
||
|
-static bool virtio_blk_data_plane_create(VirtIOBlock *s, Error **errp)
|
||
|
+static bool virtio_blk_vq_aio_context_init(VirtIOBlock *s, Error **errp)
|
||
|
{
|
||
|
VirtIODevice *vdev = VIRTIO_DEVICE(s);
|
||
|
VirtIOBlkConf *conf = &s->conf;
|
||
|
@@ -1659,11 +1659,6 @@ static bool virtio_blk_data_plane_create(VirtIOBlock *s, Error **errp)
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
- /* Don't try if transport does not support notifiers. */
|
||
|
- if (!virtio_device_ioeventfd_enabled(vdev)) {
|
||
|
- s->dataplane_disabled = true;
|
||
|
- return false;
|
||
|
- }
|
||
|
|
||
|
s->vq_aio_context = g_new(AioContext *, conf->num_queues);
|
||
|
|
||
|
@@ -1676,7 +1671,7 @@ static bool virtio_blk_data_plane_create(VirtIOBlock *s, Error **errp)
|
||
|
s->vq_aio_context[i] = ctx;
|
||
|
}
|
||
|
|
||
|
- /* Released in virtio_blk_data_plane_destroy() */
|
||
|
+ /* Released in virtio_blk_vq_aio_context_cleanup() */
|
||
|
object_ref(OBJECT(conf->iothread));
|
||
|
} else {
|
||
|
AioContext *ctx = qemu_get_aio_context();
|
||
|
@@ -1689,7 +1684,7 @@ static bool virtio_blk_data_plane_create(VirtIOBlock *s, Error **errp)
|
||
|
}
|
||
|
|
||
|
/* Context: BQL held */
|
||
|
-static void virtio_blk_data_plane_destroy(VirtIOBlock *s)
|
||
|
+static void virtio_blk_vq_aio_context_cleanup(VirtIOBlock *s)
|
||
|
{
|
||
|
VirtIOBlkConf *conf = &s->conf;
|
||
|
|
||
|
@@ -2015,7 +2010,13 @@ static void virtio_blk_device_realize(DeviceState *dev, Error **errp)
|
||
|
virtio_add_queue(vdev, conf->queue_size, virtio_blk_handle_output);
|
||
|
}
|
||
|
qemu_coroutine_inc_pool_size(conf->num_queues * conf->queue_size / 2);
|
||
|
- virtio_blk_data_plane_create(s, &err);
|
||
|
+
|
||
|
+ /* Don't start dataplane if transport does not support notifiers. */
|
||
|
+ if (!virtio_device_ioeventfd_enabled(vdev)) {
|
||
|
+ s->dataplane_disabled = true;
|
||
|
+ }
|
||
|
+
|
||
|
+ virtio_blk_vq_aio_context_init(s, &err);
|
||
|
if (err != NULL) {
|
||
|
error_propagate(errp, err);
|
||
|
for (i = 0; i < conf->num_queues; i++) {
|
||
|
@@ -2052,7 +2053,7 @@ static void virtio_blk_device_unrealize(DeviceState *dev)
|
||
|
|
||
|
blk_drain(s->blk);
|
||
|
del_boot_device_lchs(dev, "/disk@0,0");
|
||
|
- virtio_blk_data_plane_destroy(s);
|
||
|
+ virtio_blk_vq_aio_context_cleanup(s);
|
||
|
for (i = 0; i < conf->num_queues; i++) {
|
||
|
virtio_del_queue(vdev, i);
|
||
|
}
|
||
|
--
|
||
|
2.39.3
|
||
|
|