qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC 07/38] seqlock: read sequence number atomically


From: Alex Bennée
Subject: Re: [Qemu-devel] [RFC 07/38] seqlock: read sequence number atomically
Date: Mon, 07 Sep 2015 16:53:39 +0100

Emilio G. Cota <address@hidden> writes:

> With this change we make sure that the compiler will not
> optimise the read of the sequence number in any way.

What was it doing? Using atomic_read to work around a compiler bug seems
a bit heavy handed if true atomicity isn't needed.

>
> Signed-off-by: Emilio G. Cota <address@hidden>
> ---
>  include/qemu/seqlock.h | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/include/qemu/seqlock.h b/include/qemu/seqlock.h
> index f1256f5..70b01fd 100644
> --- a/include/qemu/seqlock.h
> +++ b/include/qemu/seqlock.h
> @@ -55,18 +55,18 @@ static inline void seqlock_write_unlock(QemuSeqLock *sl)
>  static inline unsigned seqlock_read_begin(QemuSeqLock *sl)
>  {
>      /* Always fail if a write is in progress.  */
> -    unsigned ret = sl->sequence & ~1;
> +    unsigned ret = atomic_read(&sl->sequence);
>  
>      /* Read sequence before reading other fields.  */
>      smp_rmb();
> -    return ret;
> +    return ret & ~1;
>  }
>  
>  static inline int seqlock_read_retry(const QemuSeqLock *sl, unsigned start)
>  {
>      /* Read other fields before reading final sequence.  */
>      smp_rmb();
> -    return unlikely(sl->sequence != start);
> +    return unlikely(atomic_read(&sl->sequence) != start);
>  }
>  
>  #endif

-- 
Alex Bennée



reply via email to

[Prev in Thread] Current Thread [Next in Thread]