• Will Deacon's avatar
    arm64: Mark functions using explicit register variables as '__always_inline' · a48e61de
    Will Deacon authored
    As of ac7c3e4f ("compiler: enable CONFIG_OPTIMIZE_INLINING forcibly"),
    inline functions are no longer annotated with '__always_inline', which
    allows the compiler to decide whether inlining is really a good idea or
    not. Although this is a great idea on paper, the reality is that AArch64
    GCC prior to 9.1 has been shown to get confused when creating an
    out-of-line copy of a function passing explicit 'register' variables
    into an inline assembly block:
    
      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91111
    
    It's not clear whether this is specific to arm64 or not but, for now,
    ensure that all of our functions using 'register' variables are marked
    as '__always_inline' so that the old behaviour is effectively preserved.
    
    Hopefully other architectures are luckier with their compilers.
    
    Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
    Cc: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    a48e61de
atomic_lse.h 10.6 KB