• Will Deacon's avatar
    arm64: lse: Make ARM64_LSE_ATOMICS depend on JUMP_LABEL · b32baf91
    Will Deacon authored
    Support for LSE atomic instructions (CONFIG_ARM64_LSE_ATOMICS) relies on
    a static key to select between the legacy LL/SC implementation which is
    available on all arm64 CPUs and the super-duper LSE implementation which
    is available on CPUs implementing v8.1 and later.
    
    Unfortunately, when building a kernel with CONFIG_JUMP_LABEL disabled
    (e.g. because the toolchain doesn't support 'asm goto'), the static key
    inside the atomics code tries to use atomics itself. This results in a
    mess of circular includes and a build failure:
    
    In file included from ./arch/arm64/include/asm/lse.h:11,
                     from ./arch/arm64/include/asm/atomic.h:16,
                     from ./include/linux/atomic.h:7,
                     from ./include/asm-generic/bitops/atomic.h:5,
                     from ./arch/arm64/include/asm/bitops.h:26,
                     from ./include/linux/bitops.h:19,
                     from ./include/linux/kernel.h:12,
                     from ./include/asm-generic/bug.h:18,
                     from ./arch/arm64/include/asm/bug.h:26,
                     from ./include/linux/bug.h:5,
                     from ./include/linux/page-flags.h:10,
                     from kernel/bounds.c:10:
    ./include/linux/jump_label.h: In function ‘static_key_count’:
    ./include/linux/jump_label.h:254:9: error: implicit declaration of function ‘atomic_read’ [-Werror=implicit-function-declaration]
      return atomic_read(&key->enabled);
             ^~~~~~~~~~~
    
    [ ... more of the same ... ]
    
    Since LSE atomic instructions are not critical to the operation of the
    kernel, make them depend on JUMP_LABEL at compile time.
    Reviewed-by: default avatarAndrew Murray <andrew.murray@arm.com>
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    b32baf91
Kconfig 52.3 KB