Message ID | 20230303171939.237819-7-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | Fix missing memory barriers on ARM | expand |
On 3/3/23 09:19, Paolo Bonzini wrote: > The barrier comes after an atomic increment, so it is enough to use > smp_mb__after_rmw(); this avoids a double barrier on x86 systems. > > Signed-off-by: Paolo Bonzini<pbonzini@redhat.com> > --- > include/block/aio-wait.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
On 03.03.23 18:19, Paolo Bonzini wrote: > The barrier comes after an atomic increment, so it is enough to use > smp_mb__after_rmw(); this avoids a double barrier on x86 systems. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > include/block/aio-wait.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/block/aio-wait.h b/include/block/aio-wait.h > index dd9a7f6461ef..da13357bb8cf 100644 > --- a/include/block/aio-wait.h > +++ b/include/block/aio-wait.h > @@ -85,7 +85,7 @@ extern AioWait global_aio_wait; > /* Increment wait_->num_waiters before evaluating cond. */ \ > qatomic_inc(&wait_->num_waiters); \ > /* Paired with smp_mb in aio_wait_kick(). */ \ > - smp_mb(); \ > + smp_mb__after_rmw(); \ > if (ctx_ && in_aio_context_home_thread(ctx_)) { \ > while ((cond)) { \ > aio_poll(ctx_, true); \ Reviewed-by: David Hildenbrand <david@redhat.com>
On Fri, Mar 03, 2023 at 06:19:37PM +0100, Paolo Bonzini wrote: > The barrier comes after an atomic increment, so it is enough to use > smp_mb__after_rmw(); this avoids a double barrier on x86 systems. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > include/block/aio-wait.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
diff --git a/include/block/aio-wait.h b/include/block/aio-wait.h index dd9a7f6461ef..da13357bb8cf 100644 --- a/include/block/aio-wait.h +++ b/include/block/aio-wait.h @@ -85,7 +85,7 @@ extern AioWait global_aio_wait; /* Increment wait_->num_waiters before evaluating cond. */ \ qatomic_inc(&wait_->num_waiters); \ /* Paired with smp_mb in aio_wait_kick(). */ \ - smp_mb(); \ + smp_mb__after_rmw(); \ if (ctx_ && in_aio_context_home_thread(ctx_)) { \ while ((cond)) { \ aio_poll(ctx_, true); \
The barrier comes after an atomic increment, so it is enough to use smp_mb__after_rmw(); this avoids a double barrier on x86 systems. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- include/block/aio-wait.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)