Emilio G. Cota <c...@braap.org> 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 <c...@braap.org> > --- > 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