[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 9/9] async: clarify usage of barriers in the polling case
From: |
Paolo Bonzini |
Subject: |
[PULL 9/9] async: clarify usage of barriers in the polling case |
Date: |
Tue, 7 Mar 2023 12:43:29 +0100 |
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>
---
util/async.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/util/async.c b/util/async.c
index e4b494150e7d..21016a1ac7c1 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);
}
--
2.39.1
- [PULL 0/9] Fix missing memory barriers on ARM, Paolo Bonzini, 2023/03/07
- [PULL 1/9] qatomic: add smp_mb__before/after_rmw(), Paolo Bonzini, 2023/03/07
- [PULL 2/9] qemu-thread-posix: cleanup, fix, document QemuEvent, Paolo Bonzini, 2023/03/07
- [PULL 3/9] qemu-thread-win32: cleanup, fix, document QemuEvent, Paolo Bonzini, 2023/03/07
- [PULL 4/9] edu: add smp_mb__after_rmw(), Paolo Bonzini, 2023/03/07
- [PULL 5/9] aio-wait: switch to smp_mb__after_rmw(), Paolo Bonzini, 2023/03/07
- [PULL 6/9] qemu-coroutine-lock: add smp_mb__after_rmw(), Paolo Bonzini, 2023/03/07
- [PULL 8/9] async: update documentation of the memory barriers, Paolo Bonzini, 2023/03/07
- [PULL 7/9] physmem: add missing memory barrier, Paolo Bonzini, 2023/03/07
- [PULL 9/9] async: clarify usage of barriers in the polling case,
Paolo Bonzini <=
- Re: [PULL 0/9] Fix missing memory barriers on ARM, Peter Maydell, 2023/03/09