[PATCH 05/37] arm64: Add cpus_have_final_boot_cap()

Suzuki K Poulose suzuki.poulose at arm.com
Thu Sep 21 02:13:31 PDT 2023


Hi Mark

On 19/09/2023 10:28, Mark Rutland wrote:
> The cpus_have_final_boot_cap() function can be used to test a cpucap

nit: cpus_have_final_cap()

> while also verifying that we do not consume the cpucap until system
> capabilities have been finalized. It would be helpful if we could do
> likewise for boot cpucaps.
> 
> This patch adds a new cpus_have_final_boot_cap() helper which can be
> used to test a cpucap while also verifying that boot capabilities have
> been finalized. Users will be added in subsequent patches.
> 
> Signed-off-by: Mark Rutland <mark.rutland at arm.com>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Mark Brown <broonie at kernel.org>
> Cc: Suzuki K Poulose <suzuki.poulose at arm.com>
> Cc: Will Deacon <will at kernel.org>
> ---
>   arch/arm64/include/asm/cpufeature.h | 27 +++++++++++++++++++++++++--
>   1 file changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
> index 7d5317bc2429f..e832b86c6b57f 100644
> --- a/arch/arm64/include/asm/cpufeature.h
> +++ b/arch/arm64/include/asm/cpufeature.h
> @@ -438,6 +438,11 @@ unsigned long cpu_get_elf_hwcap2(void);
>   #define cpu_set_named_feature(name) cpu_set_feature(cpu_feature(name))
>   #define cpu_have_named_feature(name) cpu_have_feature(cpu_feature(name))
>   
> +static __always_inline bool boot_capabilities_finalized(void)
> +{
> +	return alternative_has_cap_likely(ARM64_ALWAYS_BOOT);
> +}
> +
>   static __always_inline bool system_capabilities_finalized(void)
>   {
>   	return alternative_has_cap_likely(ARM64_ALWAYS_SYSTEM);
> @@ -473,8 +478,26 @@ static __always_inline bool __cpus_have_const_cap(int num)
>   /*
>    * Test for a capability without a runtime check.
>    *
> - * Before capabilities are finalized, this will BUG().
> - * After capabilities are finalized, this is patched to avoid a runtime check.
> + * Before boot capabilities are finalized, this will BUG().
> + * After boot capabilities are finalized, this is patched to avoid a runtime
> + * check.
> + *
> + * @num must be a compile-time constant.
> + */
> +static __always_inline bool cpus_have_final_boot_cap(int num)
> +{
> +	if (boot_capabilities_finalized())

Does this need to make sure the cap is really a "BOOT" cap ? It is a bit 
of an overkill, but prevents users from incorrectly assuming the cap is
finalised ?


Suzuki

> +		return __cpus_have_const_cap(num);
> +	else
> +		BUG();
> +}
> +
> +/*
> + * Test for a capability without a runtime check.
> + *
> + * Before system capabilities are finalized, this will BUG().
> + * After system capabilities are finalized, this is patched to avoid a runtime
> + * check.
>    *
>    * @num must be a compile-time constant.
>    */




More information about the linux-arm-kernel mailing list