• Mark Rutland's avatar
    arm64: Align boot cpucap handling with system cpucap handling · eb15d707
    Mark Rutland authored
    Currently the detection+enablement of boot cpucaps is separate from the
    patching of boot cpucap alternatives, which means there's a period where
    cpus_have_cap($CAP) and alternative_has_cap($CAP) may be mismatched.
    
    It would be preferable to manage the boot cpucaps in the same way as the
    system cpucaps, both for clarity and to minimize the risk of accidental
    usage of code relying upon an alternative which has not yet been
    patched.
    
    This patch aligns the handling of boot cpucaps with the handling of
    system cpucaps:
    
    * The existing setup_boot_cpu_capabilities() function is moved to be
      closer to the setup_system_capabilities() and setup_system_features()
      functions so that they're more clearly related and more likely to be
      updated together in future.
    
    * The patching of boot cpucap alternatives is moved into
      setup_boot_cpu_capabilities(), immediately after boot cpucaps are
      detected and enabled.
    
    * A new setup_boot_cpu_features() function is added to mirror
      setup_system_features(); this handles initialization of cpucap data
      structures and calls setup_boot_cpu_capabilities(). This makes
      init_cpu_features() a closer mirror to update_cpu_features(), and
      makes smp_prepare_boot_cpu() a closer mirror to smp_cpus_done().
    
    Importantly, while these changes alter the structure of the code, they
    retain the existing order of calls to:
    
      init_cpu_features(); // prefix initializing feature regs
      init_cpucap_indirect_list();
      detect_system_supports_pseudo_nmi();
      update_cpu_capabilities(SCOPE_BOOT_CPU | SCOPE_LOCAL_CPU);
      enable_cpu_capabilities(SCOPE_BOOT_CPU);
      apply_boot_alternatives();
    
    ... and hence there should be no functional change as a result of this
    patch; this is purely a structural cleanup.
    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/20231212170910.3745497-3-mark.rutland@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    eb15d707
cpufeature.c 118 KB