lkml.org 
[lkml]   [2019]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.3 148/203] arm64: lse: Make ARM64_LSE_ATOMICS depend on JUMP_LABEL
    Date
    From: Will Deacon <will@kernel.org>

    [ Upstream commit b32baf91f60fb9c7010bff87e68132f2ce31d9a8 ]

    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: Andrew Murray <andrew.murray@arm.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/arm64/Kconfig | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
    index 3adcec05b1f67..27405ac94228b 100644
    --- a/arch/arm64/Kconfig
    +++ b/arch/arm64/Kconfig
    @@ -1263,6 +1263,7 @@ config ARM64_PAN

    config ARM64_LSE_ATOMICS
    bool "Atomic instructions"
    + depends on JUMP_LABEL
    default y
    help
    As part of the Large System Extensions, ARMv8.1 introduces new
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-09-22 20:48    [W:5.019 / U:0.628 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site