• Mark Rutland's avatar
    arm64: alternatives: add shared NOP callback · d926079f
    Mark Rutland authored
    For each instance of an alternative, the compiler outputs a distinct
    copy of the alternative instructions into a subsection. As the compiler
    doesn't have special knowledge of alternatives, it cannot coalesce these
    to save space.
    
    In a defconfig kernel built with GCC 12.1.0, there are approximately
    10,000 instances of alternative_has_feature_likely(), where the
    replacement instruction is always a NOP. As NOPs are
    position-independent, we don't need a unique copy per alternative
    sequence.
    
    This patch adds a callback to patch an alternative sequence with NOPs,
    and make use of this in alternative_has_feature_likely(). So that this
    can be used for other sites in future, this is written to patch multiple
    instructions up to the original sequence length.
    
    For NVHE, an alias is added to image-vars.h.
    
    For modules, the callback is exported. Note that as modules are loaded
    within 2GiB of the kernel, an alt_instr entry in a module can always
    refer directly to the callback, and no special handling is necessary.
    
    When building with GCC 12.1.0, the vmlinux is ~158KiB smaller, though
    the resulting Image size is unchanged due to alignment constraints and
    padding:
    
    | % ls -al vmlinux-*
    | -rwxr-xr-x 1 mark mark 134644592 Sep  1 14:52 vmlinux-after
    | -rwxr-xr-x 1 mark mark 134486232 Sep  1 14:50 vmlinux-before
    | % ls -al Image-*
    | -rw-r--r-- 1 mark mark 37108224 Sep  1 14:52 Image-after
    | -rw-r--r-- 1 mark mark 37108224 Sep  1 14:50 Image-before
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Cc: James Morse <james.morse@arm.com>
    Cc: Joey Gouly <joey.gouly@arm.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20220912162210.3626215-9-mark.rutland@arm.comSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    d926079f
image-vars.h 4.88 KB