Skip to content

Commit b59167a

Browse files
Peter ZijlstraKAGA-KOKO
authored andcommitted
x86/percpu: Fix this_cpu_read()
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: 7c3576d ("[PATCH] i386: Convert PDA into the percpu section") Reported-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Eric Dumazet <edumazet@google.com> Cc: hpa@zytor.com Cc: eric.dumazet@gmail.com Cc: bp@alien8.de Cc: stable@vger.kernel.org Link: https://lkml.kernel.org/r/20181011104019.748208519@infradead.org
1 parent 4907c68 commit b59167a

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

arch/x86/include/asm/percpu.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,22 +185,22 @@ do { \
185185
typeof(var) pfo_ret__; \
186186
switch (sizeof(var)) { \
187187
case 1: \
188-
asm(op "b "__percpu_arg(1)",%0" \
188+
asm volatile(op "b "__percpu_arg(1)",%0"\
189189
: "=q" (pfo_ret__) \
190190
: "m" (var)); \
191191
break; \
192192
case 2: \
193-
asm(op "w "__percpu_arg(1)",%0" \
193+
asm volatile(op "w "__percpu_arg(1)",%0"\
194194
: "=r" (pfo_ret__) \
195195
: "m" (var)); \
196196
break; \
197197
case 4: \
198-
asm(op "l "__percpu_arg(1)",%0" \
198+
asm volatile(op "l "__percpu_arg(1)",%0"\
199199
: "=r" (pfo_ret__) \
200200
: "m" (var)); \
201201
break; \
202202
case 8: \
203-
asm(op "q "__percpu_arg(1)",%0" \
203+
asm volatile(op "q "__percpu_arg(1)",%0"\
204204
: "=r" (pfo_ret__) \
205205
: "m" (var)); \
206206
break; \

0 commit comments

Comments
 (0)