On Thu, Oct 11, 2018 at 3:45 AM Peter Zijlstra <pet...@infradead.org> wrote: > > Eric reported that a sequence count loop using this_cpu_read() got > optimized out. This is wrong, this_cpu_read() must imply READ_ONCE() > because the interface is IRQ-safe, therefore an interrupt can have > changed the per-cpu value. > > Fixes: 59eaef78bfea ("x86/tsc: Remodel cyc2ns to use seqcount_latch()") > Reported-by: Eric Dumazet <eduma...@google.com> > Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org>
Acked-by: Eric Dumazet <eduma...@google.com> > --- > arch/x86/include/asm/percpu.h | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > --- a/arch/x86/include/asm/percpu.h > +++ b/arch/x86/include/asm/percpu.h > @@ -185,22 +185,22 @@ do { > \ > typeof(var) pfo_ret__; \ > switch (sizeof(var)) { \ > case 1: \ > - asm(op "b "__percpu_arg(1)",%0" \ > + asm volatile(op "b "__percpu_arg(1)",%0"\ > : "=q" (pfo_ret__) \ > : "m" (var)); \ > break; \ > case 2: \ > - asm(op "w "__percpu_arg(1)",%0" \ > + asm volatile(op "w "__percpu_arg(1)",%0"\ > : "=r" (pfo_ret__) \ > : "m" (var)); \ > break; \ > case 4: \ > - asm(op "l "__percpu_arg(1)",%0" \ > + asm volatile(op "l "__percpu_arg(1)",%0"\ > : "=r" (pfo_ret__) \ > : "m" (var)); \ > break; \ > case 8: \ > - asm(op "q "__percpu_arg(1)",%0" \ > + asm volatile(op "q "__percpu_arg(1)",%0"\ > : "=r" (pfo_ret__) \ > : "m" (var)); \ > break; \ > >