[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
- Re: [Qemu-devel] [RFC 07/38] seqlock: read sequence number atomically,
Alex Bennée <=