• Mark Rutland's avatar
    arm64: insn: avoid circular include dependency · 69bb0585
    Mark Rutland authored
    Nathan reports that when building with CONFIG_LTO_CLANG_THIN=y, the
    build fails due to BUILD_BUG_ON() not being defined before its uss in
    <asm/insn.h>.
    
    The problem is that with LTO, we patch READ_ONCE(), and <asm/rwonce.h>
    includes <asm/insn.h>, creating a circular include chain:
    
            <linux/build_bug.h>
            <linux/compiler.h>
            <asm/rwonce.h>
            <asm/alternative-macros.h>
            <asm/insn.h>
            <linux/build-bug.h>
    
    ... and so when <asm/insn.h> includes <linux/build_bug.h>, none of the
    BUILD_BUG* definitions have happened yet.
    
    To avoid this, let's move AARCH64_INSN_SIZE into a header without any
    dependencies, such that it can always be safely included. At the same
    time, avoid including <asm/alternative.h> in <asm/insn.h>, which should
    no longer be necessary (and doesn't make sense when insn.h is consumed
    by userspace).
    Reported-by: default avatarNathan Chancellor <nathan@kernel.org>
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20210621080830.GA37068@C02TD0UTHF1T.local
    Fixes: 3e00e39d ("arm64: insn: move AARCH64_INSN_SIZE into <asm/insn.h>")
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    69bb0585
insn.h 19.5 KB