Commit 7bf46aa1 authored by Mark Rutland's avatar Mark Rutland Committed by Catalin Marinas

arm64: Add cpus_have_final_boot_cap()

The cpus_have_final_cap() function can be used to test a cpucap 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: default avatarMark Rutland <mark.rutland@arm.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent de66cb37
...@@ -438,6 +438,11 @@ unsigned long cpu_get_elf_hwcap2(void); ...@@ -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_set_named_feature(name) cpu_set_feature(cpu_feature(name))
#define cpu_have_named_feature(name) cpu_have_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) static __always_inline bool system_capabilities_finalized(void)
{ {
return alternative_has_cap_likely(ARM64_ALWAYS_SYSTEM); return alternative_has_cap_likely(ARM64_ALWAYS_SYSTEM);
...@@ -473,8 +478,26 @@ static __always_inline bool __cpus_have_const_cap(int num) ...@@ -473,8 +478,26 @@ static __always_inline bool __cpus_have_const_cap(int num)
/* /*
* Test for a capability without a runtime check. * Test for a capability without a runtime check.
* *
* Before capabilities are finalized, this will BUG(). * Before boot capabilities are finalized, this will BUG().
* After capabilities are finalized, this is patched to avoid a runtime check. * 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())
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. * @num must be a compile-time constant.
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment