[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] aio: Remove spurious smp_read_barrier_depends()
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH] aio: Remove spurious smp_read_barrier_depends() |
Date: |
Thu, 1 Sep 2016 13:01:02 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 |
On 01/09/2016 00:29, Pranith Kumar wrote:
> smp_read_barrier_depends() should be used only if you are reading
> dependent pointers which are shared.
bh is shared since it is equal to ctx->first_bh or
ctx->first_bh->...->next. While the compiler will always order the load
of bh->next after the load of ctx->first_bh and any previous load of
bh->next, this may not be the case for the processor. Only the DEC
Alpha has this behavior, but it _can_ happen.
Paolo
Here 'bh' is a local variable and
> dereferencing it will always be ordered after loading 'bh', i.e.,
> bh->next will always be ordered after fetching bh.
>
> This patch removes the barrier and adds a comment why storing
> 'bh->next' is necessary.
>
> Signed-off-by: Pranith Kumar <address@hidden>
> ---
> async.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/async.c b/async.c
> index 3bca9b0..6b691aa 100644
> --- a/async.c
> +++ b/async.c
> @@ -77,8 +77,7 @@ int aio_bh_poll(AioContext *ctx)
>
> ret = 0;
> for (bh = ctx->first_bh; bh; bh = next) {
> - /* Make sure that fetching bh happens before accessing its members */
> - smp_read_barrier_depends();
> + /* store bh->next since bh can be freed in aio_bh_call() */
> next = bh->next;
> /* The atomic_xchg is paired with the one in qemu_bh_schedule. The
> * implicit memory barrier ensures that the callback sees all writes
>
- Re: [Qemu-devel] [PATCH] aio: Remove spurious smp_read_barrier_depends(),
Paolo Bonzini <=