aboutsummaryrefslogtreecommitdiff
path: root/util/async.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2023-03-06 10:43:52 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2023-03-07 12:39:53 +0100
commit6229438cca037d42f44a96d38feb15cb102a444f (patch)
tree4b3e81042a60b8d355a918fa7cba17f10e3bf2f8 /util/async.c
parent8dd48650b43dfde4ebea34191ac267e474bcc29e (diff)
downloadqemu-6229438cca037d42f44a96d38feb15cb102a444f.zip
qemu-6229438cca037d42f44a96d38feb15cb102a444f.tar.gz
qemu-6229438cca037d42f44a96d38feb15cb102a444f.tar.bz2
async: clarify usage of barriers in the polling case
Explain that aio_context_notifier_poll() relies on aio_notify_accept() to catch all the memory writes that were done before ctx->notified was set to true. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'util/async.c')
-rw-r--r--util/async.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/util/async.c b/util/async.c
index e4b4941..21016a1 100644
--- a/util/async.c
+++ b/util/async.c
@@ -474,8 +474,9 @@ void aio_notify_accept(AioContext *ctx)
qatomic_set(&ctx->notified, false);
/*
- * Write ctx->notified before reading e.g. bh->flags. Pairs with smp_wmb
- * in aio_notify.
+ * Order reads of ctx->notified (in aio_context_notifier_poll()) and the
+ * above clearing of ctx->notified before reads of e.g. bh->flags. Pairs
+ * with smp_wmb() in aio_notify.
*/
smp_mb();
}
@@ -498,6 +499,11 @@ static bool aio_context_notifier_poll(void *opaque)
EventNotifier *e = opaque;
AioContext *ctx = container_of(e, AioContext, notifier);
+ /*
+ * No need for load-acquire because we just want to kick the
+ * event loop. aio_notify_accept() takes care of synchronizing
+ * the event loop with the producers.
+ */
return qatomic_read(&ctx->notified);
}