diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2023-03-06 10:43:52 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2023-03-07 12:39:53 +0100 |
commit | 6229438cca037d42f44a96d38feb15cb102a444f (patch) | |
tree | 4b3e81042a60b8d355a918fa7cba17f10e3bf2f8 /util/async.c | |
parent | 8dd48650b43dfde4ebea34191ac267e474bcc29e (diff) | |
download | qemu-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.c | 10 |
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); } |