virtio-blk: Use ioeventfd_attach in start_ioeventfd
Commit d3f6f294ae
("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>
This commit is contained in:
parent
5bdbaebcce
commit
52bff01f64
@ -37,6 +37,8 @@
|
|||||||
#include "hw/virtio/virtio-blk-common.h"
|
#include "hw/virtio/virtio-blk-common.h"
|
||||||
#include "qemu/coroutine.h"
|
#include "qemu/coroutine.h"
|
||||||
|
|
||||||
|
static void virtio_blk_ioeventfd_attach(VirtIOBlock *s);
|
||||||
|
|
||||||
static void virtio_blk_init_request(VirtIOBlock *s, VirtQueue *vq,
|
static void virtio_blk_init_request(VirtIOBlock *s, VirtQueue *vq,
|
||||||
VirtIOBlockReq *req)
|
VirtIOBlockReq *req)
|
||||||
{
|
{
|
||||||
@ -1847,17 +1849,14 @@ static int virtio_blk_start_ioeventfd(VirtIODevice *vdev)
|
|||||||
s->ioeventfd_started = true;
|
s->ioeventfd_started = true;
|
||||||
smp_wmb(); /* paired with aio_notify_accept() on the read side */
|
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++) {
|
* Get this show started by hooking up our callbacks. If drained now,
|
||||||
VirtQueue *vq = virtio_get_queue(vdev, i);
|
* virtio_blk_drained_end() will do this later.
|
||||||
AioContext *ctx = s->vq_aio_context[i];
|
* Attaching the notifier also kicks the virtqueues, processing any requests
|
||||||
|
* they may already have.
|
||||||
/* 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_blk_ioeventfd_attach(s);
|
||||||
if (!blk_in_drain(s->conf.conf.blk)) {
|
|
||||||
virtio_queue_aio_attach_host_notifier(vq, ctx);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user