Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
virtio-scsi: don't lock AioContext around virtio_queue_aio_attach_hos…
…t_notifier()

virtio_queue_aio_attach_host_notifier() does not require the AioContext
lock. Stop taking the lock and add an explicit smp_wmb() because we were
relying on the implicit barrier in the AioContext lock before.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-ID: <20231204164259.1515217-3-stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
Stefan Hajnoczi authored and Kevin Wolf committed Dec 21, 2023
1 parent 2fb957b commit 99af49d
Showing 1 changed file with 1 addition and 7 deletions.
8 changes: 1 addition & 7 deletions hw/scsi/virtio-scsi-dataplane.c
Expand Up @@ -149,23 +149,17 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev)

memory_region_transaction_commit();

/*
* These fields are visible to the IOThread so we rely on implicit barriers
* in aio_context_acquire() on the write side and aio_notify_accept() on
* the read side.
*/
s->dataplane_starting = false;
s->dataplane_started = true;
smp_wmb(); /* paired with aio_notify_accept() */

if (s->bus.drain_count == 0) {
aio_context_acquire(s->ctx);
virtio_queue_aio_attach_host_notifier(vs->ctrl_vq, s->ctx);
virtio_queue_aio_attach_host_notifier_no_poll(vs->event_vq, s->ctx);

for (i = 0; i < vs->conf.num_queues; i++) {
virtio_queue_aio_attach_host_notifier(vs->cmd_vqs[i], s->ctx);
}
aio_context_release(s->ctx);
}
return 0;

Expand Down

0 comments on commit 99af49d

Please sign in to comment.