lkml.org 
[lkml]   [2018]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 113/114] x86/percpu: Fix this_cpu_read()
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Peter Zijlstra <peterz@infradead.org>

    commit b59167ac7bafd804c91e49ad53c6d33a7394d4c8 upstream.

    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: 7c3576d261ce ("[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
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    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
    @@ -184,22 +184,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; \

    \
     
     \ /
      Last update: 2018-11-08 23:29    [W:4.348 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site