• Pavel Kozlov's avatar
    ARC: atomics: Add compiler barrier to atomic operations... · 42f51fb2
    Pavel Kozlov authored
    ... to avoid unwanted gcc optimizations
    
    SMP kernels fail to boot with commit 596ff4a0
    ("cpumask: re-introduce constant-sized cpumask optimizations").
    
    |
    | percpu: BUG: failure at mm/percpu.c:2981/pcpu_build_alloc_info()!
    |
    
    The write operation performed by the SCOND instruction in the atomic
    inline asm code is not properly passed to the compiler. The compiler
    cannot correctly optimize a nested loop that runs through the cpumask
    in the pcpu_build_alloc_info() function.
    
    Fix this by add a compiler barrier (memory clobber in inline asm).
    
    Apparently atomic ops used to have memory clobber implicitly via
    surrounding smp_mb(). However commit b64be683
    ("ARC: atomics: implement relaxed variants") removed the smp_mb() for
    the relaxed variants, but failed to add the explicit compiler barrier.
    
    Link: https://github.com/foss-for-synopsys-dwc-arc-processors/linux/issues/135
    Cc: <stable@vger.kernel.org> # v6.3+
    Fixes: b64be683 ("ARC: atomics: implement relaxed variants")
    Signed-off-by: default avatarPavel Kozlov <pavel.kozlov@synopsys.com>
    Signed-off-by: default avatarVineet Gupta <vgupta@kernel.org>
    [vgupta: tweaked the changelog and added Fixes tag]
    42f51fb2
atomic-llsc.h 2.71 KB