* Mon Feb 19 2024 Miroslav Rezanina <mrezanin@redhat.com> - 8.2.0-6
- kvm-virtio-scsi-Attach-event-vq-notifier-with-no_poll.patch [RHEL-3934] - kvm-virtio-Re-enable-notifications-after-drain.patch [RHEL-3934] - kvm-virtio-blk-Use-ioeventfd_attach-in-start_ioeventfd.patch [RHEL-3934] - kvm-virtio-blk-avoid-using-ioeventfd-state-in-irqfd-cond.patch [RHEL-15394] - kvm-hw-arm-virt-deprecate-virt-rhel9.-0-2-.0-machine-typ.patch [RHEL-24988] - kvm-x86-rhel-9.2.0-machine-type-compat-fix.patch [RHEL-17068] - Resolves: RHEL-3934 ([qemu-kvm] Failed on repeatedly hotplug/unplug disk iothread enabled ) - Resolves: RHEL-15394 (virtio-blk: qemu hang on "no response on QMP query-status" when write data to disk without enough space) - Resolves: RHEL-24988 (Mark virt-rhel9.{0,2}.0 machine types as deprecated)
This commit is contained in:
parent
6b2ce2692f
commit
0781fd2d16
@ -0,0 +1,41 @@
|
|||||||
|
From 4c1d07995a7afb6fae68a7e7a8b6b6c94fa0a7bb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cornelia Huck <cohuck@redhat.com>
|
||||||
|
Date: Mon, 12 Feb 2024 10:37:54 +0100
|
||||||
|
Subject: [PATCH 5/6] hw/arm/virt: deprecate virt-rhel9.{0,2}.0 machine types
|
||||||
|
|
||||||
|
RH-Author: Cornelia Huck <cohuck@redhat.com>
|
||||||
|
RH-MergeRequest: 225: hw/arm/virt: deprecate virt-rhel9.{0,2}.0 machine types
|
||||||
|
RH-Jira: RHEL-24988
|
||||||
|
RH-Acked-by: Sebastian Ott <sebott@redhat.com>
|
||||||
|
RH-Acked-by: Eric Auger <eric.auger@redhat.com>
|
||||||
|
RH-Commit: [1/1] f15579db44808fa8a2d7bc01b3915aa59c064411 (cohuck/qemu-kvm-c9s)
|
||||||
|
|
||||||
|
Jira: https://issues.redhat.com/browse/RHEL-24988
|
||||||
|
Upstream: RHEL only
|
||||||
|
|
||||||
|
We do not plan to support any machine types prior to 9.4.0; leave them
|
||||||
|
in, but mark as deprecated.
|
||||||
|
|
||||||
|
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
|
||||||
|
---
|
||||||
|
hw/arm/virt.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
|
||||||
|
index 60f117f0d2..943c563391 100644
|
||||||
|
--- a/hw/arm/virt.c
|
||||||
|
+++ b/hw/arm/virt.c
|
||||||
|
@@ -3679,6 +3679,10 @@ static void rhel920_virt_options(MachineClass *mc)
|
||||||
|
compat_props_add(mc->compat_props, hw_compat_rhel_9_4, hw_compat_rhel_9_4_len);
|
||||||
|
compat_props_add(mc->compat_props, hw_compat_rhel_9_3, hw_compat_rhel_9_3_len);
|
||||||
|
compat_props_add(mc->compat_props, hw_compat_rhel_9_2, hw_compat_rhel_9_2_len);
|
||||||
|
+
|
||||||
|
+ /* RHEL 9.4 is the first supported release */
|
||||||
|
+ mc->deprecation_reason =
|
||||||
|
+ "machine types for versions prior to 9.4 are deprecated";
|
||||||
|
}
|
||||||
|
DEFINE_RHEL_MACHINE(9, 2, 0)
|
||||||
|
|
||||||
|
--
|
||||||
|
2.39.3
|
||||||
|
|
139
kvm-virtio-Re-enable-notifications-after-drain.patch
Normal file
139
kvm-virtio-Re-enable-notifications-after-drain.patch
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
From 2a758da4e1433564998def68447008908c96e113 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
Date: Fri, 2 Feb 2024 16:31:57 +0100
|
||||||
|
Subject: [PATCH 2/6] virtio: Re-enable notifications after drain
|
||||||
|
|
||||||
|
RH-Author: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
RH-MergeRequest: 223: virtio: Re-enable notifications after drain
|
||||||
|
RH-Jira: RHEL-3934
|
||||||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
RH-Commit: [2/3] e3be798e6259a378fc03f4364ecaeb875b01f64c (hreitz/qemu-kvm-c-9-s)
|
||||||
|
|
||||||
|
During drain, we do not care about virtqueue notifications, which is why
|
||||||
|
we remove the handlers on it. When removing those handlers, whether vq
|
||||||
|
notifications are enabled or not depends on whether we were in polling
|
||||||
|
mode or not; if not, they are enabled (by default); if so, they have
|
||||||
|
been disabled by the io_poll_start callback.
|
||||||
|
|
||||||
|
Because we do not care about those notifications after removing the
|
||||||
|
handlers, this is fine. However, we have to explicitly ensure they are
|
||||||
|
enabled when re-attaching the handlers, so we will resume receiving
|
||||||
|
notifications. We do this in virtio_queue_aio_attach_host_notifier*().
|
||||||
|
If such a function is called while we are in a polling section,
|
||||||
|
attaching the notifiers will then invoke the io_poll_start callback,
|
||||||
|
re-disabling notifications.
|
||||||
|
|
||||||
|
Because we will always miss virtqueue updates in the drained section, we
|
||||||
|
also need to poll the virtqueue once after attaching the notifiers.
|
||||||
|
|
||||||
|
Buglink: https://issues.redhat.com/browse/RHEL-3934
|
||||||
|
Signed-off-by: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
Message-ID: <20240202153158.788922-3-hreitz@redhat.com>
|
||||||
|
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
(cherry picked from commit 5bdbaebcce18fe6a627cafad2043ec08f3de5744)
|
||||||
|
---
|
||||||
|
hw/virtio/virtio.c | 42 ++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
include/block/aio.h | 7 ++++++-
|
||||||
|
2 files changed, 48 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
|
||||||
|
index 3a160f86ed..356d690cc9 100644
|
||||||
|
--- a/hw/virtio/virtio.c
|
||||||
|
+++ b/hw/virtio/virtio.c
|
||||||
|
@@ -3556,6 +3556,17 @@ static void virtio_queue_host_notifier_aio_poll_end(EventNotifier *n)
|
||||||
|
|
||||||
|
void virtio_queue_aio_attach_host_notifier(VirtQueue *vq, AioContext *ctx)
|
||||||
|
{
|
||||||
|
+ /*
|
||||||
|
+ * virtio_queue_aio_detach_host_notifier() can leave notifications disabled.
|
||||||
|
+ * Re-enable them. (And if detach has not been used before, notifications
|
||||||
|
+ * being enabled is still the default state while a notifier is attached;
|
||||||
|
+ * see virtio_queue_host_notifier_aio_poll_end(), which will always leave
|
||||||
|
+ * notifications enabled once the polling section is left.)
|
||||||
|
+ */
|
||||||
|
+ if (!virtio_queue_get_notification(vq)) {
|
||||||
|
+ virtio_queue_set_notification(vq, 1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
aio_set_event_notifier(ctx, &vq->host_notifier,
|
||||||
|
virtio_queue_host_notifier_read,
|
||||||
|
virtio_queue_host_notifier_aio_poll,
|
||||||
|
@@ -3563,6 +3574,13 @@ void virtio_queue_aio_attach_host_notifier(VirtQueue *vq, AioContext *ctx)
|
||||||
|
aio_set_event_notifier_poll(ctx, &vq->host_notifier,
|
||||||
|
virtio_queue_host_notifier_aio_poll_begin,
|
||||||
|
virtio_queue_host_notifier_aio_poll_end);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * We will have ignored notifications about new requests from the guest
|
||||||
|
+ * while no notifiers were attached, so "kick" the virt queue to process
|
||||||
|
+ * those requests now.
|
||||||
|
+ */
|
||||||
|
+ event_notifier_set(&vq->host_notifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -3573,14 +3591,38 @@ void virtio_queue_aio_attach_host_notifier(VirtQueue *vq, AioContext *ctx)
|
||||||
|
*/
|
||||||
|
void virtio_queue_aio_attach_host_notifier_no_poll(VirtQueue *vq, AioContext *ctx)
|
||||||
|
{
|
||||||
|
+ /* See virtio_queue_aio_attach_host_notifier() */
|
||||||
|
+ if (!virtio_queue_get_notification(vq)) {
|
||||||
|
+ virtio_queue_set_notification(vq, 1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
aio_set_event_notifier(ctx, &vq->host_notifier,
|
||||||
|
virtio_queue_host_notifier_read,
|
||||||
|
NULL, NULL);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * See virtio_queue_aio_attach_host_notifier().
|
||||||
|
+ * Note that this may be unnecessary for the type of virtqueues this
|
||||||
|
+ * function is used for. Still, it will not hurt to have a quick look into
|
||||||
|
+ * whether we can/should process any of the virtqueue elements.
|
||||||
|
+ */
|
||||||
|
+ event_notifier_set(&vq->host_notifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
void virtio_queue_aio_detach_host_notifier(VirtQueue *vq, AioContext *ctx)
|
||||||
|
{
|
||||||
|
aio_set_event_notifier(ctx, &vq->host_notifier, NULL, NULL, NULL);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * aio_set_event_notifier_poll() does not guarantee whether io_poll_end()
|
||||||
|
+ * will run after io_poll_begin(), so by removing the notifier, we do not
|
||||||
|
+ * know whether virtio_queue_host_notifier_aio_poll_end() has run after a
|
||||||
|
+ * previous virtio_queue_host_notifier_aio_poll_begin(), i.e. whether
|
||||||
|
+ * notifications are enabled or disabled. It does not really matter anyway;
|
||||||
|
+ * we just removed the notifier, so we do not care about notifications until
|
||||||
|
+ * we potentially re-attach it. The attach_host_notifier functions will
|
||||||
|
+ * ensure that notifications are enabled again when they are needed.
|
||||||
|
+ */
|
||||||
|
}
|
||||||
|
|
||||||
|
void virtio_queue_host_notifier_read(EventNotifier *n)
|
||||||
|
diff --git a/include/block/aio.h b/include/block/aio.h
|
||||||
|
index af05512a7d..261c77fd9a 100644
|
||||||
|
--- a/include/block/aio.h
|
||||||
|
+++ b/include/block/aio.h
|
||||||
|
@@ -480,9 +480,14 @@ void aio_set_event_notifier(AioContext *ctx,
|
||||||
|
AioPollFn *io_poll,
|
||||||
|
EventNotifierHandler *io_poll_ready);
|
||||||
|
|
||||||
|
-/* Set polling begin/end callbacks for an event notifier that has already been
|
||||||
|
+/*
|
||||||
|
+ * Set polling begin/end callbacks for an event notifier that has already been
|
||||||
|
* registered with aio_set_event_notifier. Do nothing if the event notifier is
|
||||||
|
* not registered.
|
||||||
|
+ *
|
||||||
|
+ * Note that if the io_poll_end() callback (or the entire notifier) is removed
|
||||||
|
+ * during polling, it will not be called, so an io_poll_begin() is not
|
||||||
|
+ * necessarily always followed by an io_poll_end().
|
||||||
|
*/
|
||||||
|
void aio_set_event_notifier_poll(AioContext *ctx,
|
||||||
|
EventNotifier *notifier,
|
||||||
|
--
|
||||||
|
2.39.3
|
||||||
|
|
75
kvm-virtio-blk-Use-ioeventfd_attach-in-start_ioeventfd.patch
Normal file
75
kvm-virtio-blk-Use-ioeventfd_attach-in-start_ioeventfd.patch
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
From 094941b2c3e66e078d93718933eb07e800a7dd60 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
Date: Fri, 2 Feb 2024 16:31:58 +0100
|
||||||
|
Subject: [PATCH 3/6] virtio-blk: Use ioeventfd_attach in start_ioeventfd
|
||||||
|
|
||||||
|
RH-Author: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
RH-MergeRequest: 223: virtio: Re-enable notifications after drain
|
||||||
|
RH-Jira: RHEL-3934
|
||||||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
RH-Commit: [3/3] 96d6760d1b7b12df695b6825b15a2a3b8a79a74c (hreitz/qemu-kvm-c-9-s)
|
||||||
|
|
||||||
|
Commit d3f6f294aeadd5f88caf0155e4360808c95b3146 ("virtio-blk: always set
|
||||||
|
ioeventfd during startup") has made virtio_blk_start_ioeventfd() always
|
||||||
|
kick the virtqueue (set the ioeventfd), regardless of whether the BB is
|
||||||
|
drained. That is no longer necessary, because attaching the host
|
||||||
|
notifier will now set the ioeventfd, too; this happens either
|
||||||
|
immediately right here in virtio_blk_start_ioeventfd(), or later when
|
||||||
|
the drain ends, in virtio_blk_ioeventfd_attach().
|
||||||
|
|
||||||
|
With event_notifier_set() removed, the code becomes the same as the one
|
||||||
|
in virtio_blk_ioeventfd_attach(), so we can reuse that function.
|
||||||
|
|
||||||
|
Signed-off-by: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
Message-ID: <20240202153158.788922-4-hreitz@redhat.com>
|
||||||
|
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
(cherry picked from commit 52bff01f64eec017ffb0d5903a0ee1d67ca7a548)
|
||||||
|
---
|
||||||
|
hw/block/virtio-blk.c | 21 ++++++++++-----------
|
||||||
|
1 file changed, 10 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
|
||||||
|
index 0b9100b746..7fdeaf2d12 100644
|
||||||
|
--- a/hw/block/virtio-blk.c
|
||||||
|
+++ b/hw/block/virtio-blk.c
|
||||||
|
@@ -37,6 +37,8 @@
|
||||||
|
#include "hw/virtio/virtio-blk-common.h"
|
||||||
|
#include "qemu/coroutine.h"
|
||||||
|
|
||||||
|
+static void virtio_blk_ioeventfd_attach(VirtIOBlock *s);
|
||||||
|
+
|
||||||
|
static void virtio_blk_init_request(VirtIOBlock *s, VirtQueue *vq,
|
||||||
|
VirtIOBlockReq *req)
|
||||||
|
{
|
||||||
|
@@ -1808,17 +1810,14 @@ static int virtio_blk_start_ioeventfd(VirtIODevice *vdev)
|
||||||
|
s->ioeventfd_started = true;
|
||||||
|
smp_wmb(); /* paired with aio_notify_accept() on the read side */
|
||||||
|
|
||||||
|
- /* Get this show started by hooking up our callbacks */
|
||||||
|
- for (i = 0; i < nvqs; i++) {
|
||||||
|
- VirtQueue *vq = virtio_get_queue(vdev, i);
|
||||||
|
- AioContext *ctx = s->vq_aio_context[i];
|
||||||
|
-
|
||||||
|
- /* Kick right away to begin processing requests already in vring */
|
||||||
|
- event_notifier_set(virtio_queue_get_host_notifier(vq));
|
||||||
|
-
|
||||||
|
- if (!blk_in_drain(s->conf.conf.blk)) {
|
||||||
|
- virtio_queue_aio_attach_host_notifier(vq, ctx);
|
||||||
|
- }
|
||||||
|
+ /*
|
||||||
|
+ * Get this show started by hooking up our callbacks. If drained now,
|
||||||
|
+ * virtio_blk_drained_end() will do this later.
|
||||||
|
+ * Attaching the notifier also kicks the virtqueues, processing any requests
|
||||||
|
+ * they may already have.
|
||||||
|
+ */
|
||||||
|
+ if (!blk_in_drain(s->conf.conf.blk)) {
|
||||||
|
+ virtio_blk_ioeventfd_attach(s);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.39.3
|
||||||
|
|
@ -0,0 +1,72 @@
|
|||||||
|
From f62b56c68d50a149a07e15797bf3605e63b2c501 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
Date: Mon, 22 Jan 2024 12:26:25 -0500
|
||||||
|
Subject: [PATCH 4/6] virtio-blk: avoid using ioeventfd state in irqfd
|
||||||
|
conditional
|
||||||
|
|
||||||
|
RH-Author: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
RH-MergeRequest: 224: virtio-blk: avoid using ioeventfd state in irqfd conditional
|
||||||
|
RH-Jira: RHEL-15394
|
||||||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
RH-Acked-by: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
RH-Commit: [1/1] 8f24084669db52457e55e2523b9f56f5560dd6ce (stefanha/centos-stream-qemu-kvm)
|
||||||
|
|
||||||
|
Requests that complete in an IOThread use irqfd to notify the guest
|
||||||
|
while requests that complete in the main loop thread use the traditional
|
||||||
|
qdev irq code path. The reason for this conditional is that the irq code
|
||||||
|
path requires the BQL:
|
||||||
|
|
||||||
|
if (s->ioeventfd_started && !s->ioeventfd_disabled) {
|
||||||
|
virtio_notify_irqfd(vdev, req->vq);
|
||||||
|
} else {
|
||||||
|
virtio_notify(vdev, req->vq);
|
||||||
|
}
|
||||||
|
|
||||||
|
There is a corner case where the conditional invokes the irq code path
|
||||||
|
instead of the irqfd code path:
|
||||||
|
|
||||||
|
static void virtio_blk_stop_ioeventfd(VirtIODevice *vdev)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
/*
|
||||||
|
* Set ->ioeventfd_started to false before draining so that host notifiers
|
||||||
|
* are not detached/attached anymore.
|
||||||
|
*/
|
||||||
|
s->ioeventfd_started = false;
|
||||||
|
|
||||||
|
/* Wait for virtio_blk_dma_restart_bh() and in flight I/O to complete */
|
||||||
|
blk_drain(s->conf.conf.blk);
|
||||||
|
|
||||||
|
During blk_drain() the conditional produces the wrong result because
|
||||||
|
ioeventfd_started is false.
|
||||||
|
|
||||||
|
Use qemu_in_iothread() instead of checking the ioeventfd state.
|
||||||
|
|
||||||
|
Cc: qemu-stable@nongnu.org
|
||||||
|
Buglink: https://issues.redhat.com/browse/RHEL-15394
|
||||||
|
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
Message-ID: <20240122172625.415386-1-stefanha@redhat.com>
|
||||||
|
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
(cherry picked from commit bfa36802d1704fc413c590ebdcc4e5ae0eacf439)
|
||||||
|
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
---
|
||||||
|
hw/block/virtio-blk.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
|
||||||
|
index 7fdeaf2d12..2ae2f6a823 100644
|
||||||
|
--- a/hw/block/virtio-blk.c
|
||||||
|
+++ b/hw/block/virtio-blk.c
|
||||||
|
@@ -66,7 +66,7 @@ static void virtio_blk_req_complete(VirtIOBlockReq *req, unsigned char status)
|
||||||
|
iov_discard_undo(&req->inhdr_undo);
|
||||||
|
iov_discard_undo(&req->outhdr_undo);
|
||||||
|
virtqueue_push(req->vq, &req->elem, req->in_len);
|
||||||
|
- if (s->ioeventfd_started && !s->ioeventfd_disabled) {
|
||||||
|
+ if (qemu_in_iothread()) {
|
||||||
|
virtio_notify_irqfd(vdev, req->vq);
|
||||||
|
} else {
|
||||||
|
virtio_notify(vdev, req->vq);
|
||||||
|
--
|
||||||
|
2.39.3
|
||||||
|
|
78
kvm-virtio-scsi-Attach-event-vq-notifier-with-no_poll.patch
Normal file
78
kvm-virtio-scsi-Attach-event-vq-notifier-with-no_poll.patch
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
From da3a5afa41790ae913d41cfcdc3c6a8731ae3fe8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
Date: Fri, 2 Feb 2024 16:31:56 +0100
|
||||||
|
Subject: [PATCH 1/6] virtio-scsi: Attach event vq notifier with no_poll
|
||||||
|
|
||||||
|
RH-Author: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
RH-MergeRequest: 223: virtio: Re-enable notifications after drain
|
||||||
|
RH-Jira: RHEL-3934
|
||||||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
RH-Commit: [1/3] d29b461a0a4b584af0ee80fb3f9e45c92ea88eb0 (hreitz/qemu-kvm-c-9-s)
|
||||||
|
|
||||||
|
As of commit 38738f7dbbda90fbc161757b7f4be35b52205552 ("virtio-scsi:
|
||||||
|
don't waste CPU polling the event virtqueue"), we only attach an io_read
|
||||||
|
notifier for the virtio-scsi event virtqueue instead, and no polling
|
||||||
|
notifiers. During operation, the event virtqueue is typically
|
||||||
|
non-empty, but none of the buffers are intended to be used immediately.
|
||||||
|
Instead, they only get used when certain events occur. Therefore, it
|
||||||
|
makes no sense to continuously poll it when non-empty, because it is
|
||||||
|
supposed to be and stay non-empty.
|
||||||
|
|
||||||
|
We do this by using virtio_queue_aio_attach_host_notifier_no_poll()
|
||||||
|
instead of virtio_queue_aio_attach_host_notifier() for the event
|
||||||
|
virtqueue.
|
||||||
|
|
||||||
|
Commit 766aa2de0f29b657148e04599320d771c36fd126 ("virtio-scsi: implement
|
||||||
|
BlockDevOps->drained_begin()") however has virtio_scsi_drained_end() use
|
||||||
|
virtio_queue_aio_attach_host_notifier() for all virtqueues, including
|
||||||
|
the event virtqueue. This can lead to it being polled again, undoing
|
||||||
|
the benefit of commit 38738f7dbbda90fbc161757b7f4be35b52205552.
|
||||||
|
|
||||||
|
Fix it by using virtio_queue_aio_attach_host_notifier_no_poll() for the
|
||||||
|
event virtqueue.
|
||||||
|
|
||||||
|
Reported-by: Fiona Ebner <f.ebner@proxmox.com>
|
||||||
|
Fixes: 766aa2de0f29b657148e04599320d771c36fd126
|
||||||
|
("virtio-scsi: implement BlockDevOps->drained_begin()")
|
||||||
|
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
Tested-by: Fiona Ebner <f.ebner@proxmox.com>
|
||||||
|
Reviewed-by: Fiona Ebner <f.ebner@proxmox.com>
|
||||||
|
Signed-off-by: Hanna Czenczek <hreitz@redhat.com>
|
||||||
|
Message-ID: <20240202153158.788922-2-hreitz@redhat.com>
|
||||||
|
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||||
|
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
(cherry picked from commit c42c3833e0cfdf2b80fb3ca410acfd392b6874ab)
|
||||||
|
---
|
||||||
|
hw/scsi/virtio-scsi.c | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
|
||||||
|
index ca365a70e9..9943186917 100644
|
||||||
|
--- a/hw/scsi/virtio-scsi.c
|
||||||
|
+++ b/hw/scsi/virtio-scsi.c
|
||||||
|
@@ -1149,6 +1149,7 @@ static void virtio_scsi_drained_begin(SCSIBus *bus)
|
||||||
|
static void virtio_scsi_drained_end(SCSIBus *bus)
|
||||||
|
{
|
||||||
|
VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus);
|
||||||
|
+ VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(s);
|
||||||
|
VirtIODevice *vdev = VIRTIO_DEVICE(s);
|
||||||
|
uint32_t total_queues = VIRTIO_SCSI_VQ_NUM_FIXED +
|
||||||
|
s->parent_obj.conf.num_queues;
|
||||||
|
@@ -1166,7 +1167,11 @@ static void virtio_scsi_drained_end(SCSIBus *bus)
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < total_queues; i++) {
|
||||||
|
VirtQueue *vq = virtio_get_queue(vdev, i);
|
||||||
|
- virtio_queue_aio_attach_host_notifier(vq, s->ctx);
|
||||||
|
+ if (vq == vs->event_vq) {
|
||||||
|
+ virtio_queue_aio_attach_host_notifier_no_poll(vq, s->ctx);
|
||||||
|
+ } else {
|
||||||
|
+ virtio_queue_aio_attach_host_notifier(vq, s->ctx);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.39.3
|
||||||
|
|
48
kvm-x86-rhel-9.2.0-machine-type-compat-fix.patch
Normal file
48
kvm-x86-rhel-9.2.0-machine-type-compat-fix.patch
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
From 2932c8de175fadeed4bb7c1024724cbabc53f6d5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sebastian Ott <sebott@redhat.com>
|
||||||
|
Date: Mon, 19 Feb 2024 02:37:27 -0500
|
||||||
|
Subject: [PATCH 6/6] x86: rhel 9.2.0 machine type compat fix
|
||||||
|
|
||||||
|
RH-Author: Sebastian Ott <sebott@redhat.com>
|
||||||
|
RH-MergeRequest: 342: Draft: x86: rhel 9.2.0 machine type compat fix (RHEL)
|
||||||
|
RH-Jira: RHEL-17068
|
||||||
|
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
||||||
|
RH-Commit: [23/23] 658dda965f34119de300eef26155f47b1b3fa7f1
|
||||||
|
|
||||||
|
Fix up the compatibility for 9.2.0 and older.
|
||||||
|
|
||||||
|
Signed-off-by: Sebastian Ott's avatarSebastian Ott <sebott@redhat.com>
|
||||||
|
---
|
||||||
|
hw/i386/pc_piix.c | 2 ++
|
||||||
|
hw/i386/pc_q35.c | 2 ++
|
||||||
|
2 files changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
|
||||||
|
index 44038391fb..09d02cc91f 100644
|
||||||
|
--- a/hw/i386/pc_piix.c
|
||||||
|
+++ b/hw/i386/pc_piix.c
|
||||||
|
@@ -1023,6 +1023,8 @@ static void pc_machine_rhel760_options(MachineClass *m)
|
||||||
|
pcmc->enforce_amd_1tb_hole = false;
|
||||||
|
/* From pc_i440fx_8_0_machine_options() */
|
||||||
|
pcmc->default_smbios_ep_type = SMBIOS_ENTRY_POINT_TYPE_32;
|
||||||
|
+ /* From pc_i440fx_8_1_machine_options() */
|
||||||
|
+ pcmc->broken_32bit_mem_addr_check = true;
|
||||||
|
/* Introduced in QEMU 8.2 */
|
||||||
|
pcmc->default_south_bridge = TYPE_PIIX3_DEVICE;
|
||||||
|
|
||||||
|
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
|
||||||
|
index 6387df97c8..c6967e1846 100644
|
||||||
|
--- a/hw/i386/pc_q35.c
|
||||||
|
+++ b/hw/i386/pc_q35.c
|
||||||
|
@@ -759,6 +759,8 @@ static void pc_q35_machine_rhel920_options(MachineClass *m)
|
||||||
|
|
||||||
|
/* From pc_q35_8_0_machine_options() */
|
||||||
|
pcmc->default_smbios_ep_type = SMBIOS_ENTRY_POINT_TYPE_32;
|
||||||
|
+ /* From pc_q35_8_1_machine_options() */
|
||||||
|
+ pcmc->broken_32bit_mem_addr_check = true;
|
||||||
|
|
||||||
|
compat_props_add(m->compat_props, hw_compat_rhel_9_4,
|
||||||
|
hw_compat_rhel_9_4_len);
|
||||||
|
--
|
||||||
|
2.39.3
|
||||||
|
|
@ -149,7 +149,7 @@ Obsoletes: %{name}-block-ssh <= %{epoch}:%{version} \
|
|||||||
Summary: QEMU is a machine emulator and virtualizer
|
Summary: QEMU is a machine emulator and virtualizer
|
||||||
Name: qemu-kvm
|
Name: qemu-kvm
|
||||||
Version: 8.2.0
|
Version: 8.2.0
|
||||||
Release: 5%{?rcrel}%{?dist}%{?cc_suffix}
|
Release: 6%{?rcrel}%{?dist}%{?cc_suffix}
|
||||||
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
||||||
# Epoch 15 used for RHEL 8
|
# Epoch 15 used for RHEL 8
|
||||||
# Epoch 17 used for RHEL 9 (due to release versioning offset in RHEL 8.5)
|
# Epoch 17 used for RHEL 9 (due to release versioning offset in RHEL 8.5)
|
||||||
@ -536,6 +536,18 @@ Patch138: kvm-tests-unit-Bump-test-replication-timeout-to-60-secon.patch
|
|||||||
Patch139: kvm-iotests-iothreads-stream-Use-the-right-TimeoutError.patch
|
Patch139: kvm-iotests-iothreads-stream-Use-the-right-TimeoutError.patch
|
||||||
# For RHEL-24045 - QEMU: default-enable dynamically using multiple memslots for virtio-mem
|
# For RHEL-24045 - QEMU: default-enable dynamically using multiple memslots for virtio-mem
|
||||||
Patch140: kvm-virtio-mem-default-enable-dynamic-memslots.patch
|
Patch140: kvm-virtio-mem-default-enable-dynamic-memslots.patch
|
||||||
|
# For RHEL-3934 - [qemu-kvm] Failed on repeatedly hotplug/unplug disk iothread enabled
|
||||||
|
Patch141: kvm-virtio-scsi-Attach-event-vq-notifier-with-no_poll.patch
|
||||||
|
# For RHEL-3934 - [qemu-kvm] Failed on repeatedly hotplug/unplug disk iothread enabled
|
||||||
|
Patch142: kvm-virtio-Re-enable-notifications-after-drain.patch
|
||||||
|
# For RHEL-3934 - [qemu-kvm] Failed on repeatedly hotplug/unplug disk iothread enabled
|
||||||
|
Patch143: kvm-virtio-blk-Use-ioeventfd_attach-in-start_ioeventfd.patch
|
||||||
|
# For RHEL-15394 - virtio-blk: qemu hang on "no response on QMP query-status" when write data to disk without enough space
|
||||||
|
Patch144: kvm-virtio-blk-avoid-using-ioeventfd-state-in-irqfd-cond.patch
|
||||||
|
# For RHEL-24988 - Mark virt-rhel9.{0,2}.0 machine types as deprecated
|
||||||
|
Patch145: kvm-hw-arm-virt-deprecate-virt-rhel9.-0-2-.0-machine-typ.patch
|
||||||
|
# For RHEL-17068 - Check/fix machine type compatibility for qemu-kvm 8.2.0 [x86_64]
|
||||||
|
Patch146: kvm-x86-rhel-9.2.0-machine-type-compat-fix.patch
|
||||||
|
|
||||||
%if %{have_clang}
|
%if %{have_clang}
|
||||||
BuildRequires: clang
|
BuildRequires: clang
|
||||||
@ -1597,6 +1609,19 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Feb 19 2024 Miroslav Rezanina <mrezanin@redhat.com> - 8.2.0-6
|
||||||
|
- kvm-virtio-scsi-Attach-event-vq-notifier-with-no_poll.patch [RHEL-3934]
|
||||||
|
- kvm-virtio-Re-enable-notifications-after-drain.patch [RHEL-3934]
|
||||||
|
- kvm-virtio-blk-Use-ioeventfd_attach-in-start_ioeventfd.patch [RHEL-3934]
|
||||||
|
- kvm-virtio-blk-avoid-using-ioeventfd-state-in-irqfd-cond.patch [RHEL-15394]
|
||||||
|
- kvm-hw-arm-virt-deprecate-virt-rhel9.-0-2-.0-machine-typ.patch [RHEL-24988]
|
||||||
|
- Resolves: RHEL-3934
|
||||||
|
([qemu-kvm] Failed on repeatedly hotplug/unplug disk iothread enabled )
|
||||||
|
- Resolves: RHEL-15394
|
||||||
|
(virtio-blk: qemu hang on "no response on QMP query-status" when write data to disk without enough space)
|
||||||
|
- Resolves: RHEL-24988
|
||||||
|
(Mark virt-rhel9.{0,2}.0 machine types as deprecated)
|
||||||
|
|
||||||
* Mon Feb 12 2024 Miroslav Rezanina <mrezanin@redhat.com> - 8.2.0-5
|
* Mon Feb 12 2024 Miroslav Rezanina <mrezanin@redhat.com> - 8.2.0-5
|
||||||
- kvm-hv-balloon-use-get_min_alignment-to-express-32-GiB-a.patch [RHEL-20341]
|
- kvm-hv-balloon-use-get_min_alignment-to-express-32-GiB-a.patch [RHEL-20341]
|
||||||
- kvm-memory-device-reintroduce-memory-region-size-check.patch [RHEL-20341]
|
- kvm-memory-device-reintroduce-memory-region-size-check.patch [RHEL-20341]
|
||||||
|
Loading…
Reference in New Issue
Block a user