• Mark Rutland's avatar
    arm64: Split kpti_install_ng_mappings() · 42c5a3b0
    Mark Rutland authored
    The arm64_cpu_capabilities::cpu_enable callbacks are intended for
    cpu-local feature enablement (e.g. poking system registers). These get
    called for each online CPU when boot/system cpucaps get finalized and
    enabled, and get called whenever a CPU is subsequently onlined.
    
    For KPTI with the ARM64_UNMAP_KERNEL_AT_EL0 cpucap, we use the
    kpti_install_ng_mappings() function as the cpu_enable callback. This
    does a mixture of cpu-local configuration (setting VBAR_EL1 to the
    appropriate trampoline vectors) and some global configuration (rewriting
    the swapper page tables to sue non-glboal mappings) that must happen at
    most once.
    
    This patch splits kpti_install_ng_mappings() into a cpu-local
    cpu_enable_kpti() initialization function and a system-wide
    kpti_install_ng_mappings() function. The cpu_enable_kpti() function is
    responsible for selecting the necessary cpu-local vectors each time a
    CPU is onlined, and the kpti_install_ng_mappings() function performs the
    one-time rewrite of the translation tables too use non-global mappings.
    Splitting the two makes the code a bit easier to follow and also allows
    the page table rewriting code to be marked as __init such that it can be
    freed after use.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    42c5a3b0
cpufeature.c 119 KB