powerpc/mm: Catch usage of cpu/mmu_has_feature() before jump label init
This allows us to catch incorrect usage of cpu_has_feature() and mmu_has_feature() prior to jump labels being initialised. mpe: Use printk() and dump_stack() rather than WARN_ON(), because WARN_ON() may not work this early in boot. Rename the Kconfig. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Родитель
c12e6f24d4
Коммит
c812c7d8f1
|
@ -69,6 +69,16 @@ config JUMP_LABEL_FEATURE_CHECKS
|
|||
feature checks. This should generate more optimal code for those
|
||||
checks.
|
||||
|
||||
config JUMP_LABEL_FEATURE_CHECK_DEBUG
|
||||
bool "Do extra check on feature fixup calls"
|
||||
depends on DEBUG_KERNEL && JUMP_LABEL_FEATURE_CHECKS
|
||||
default n
|
||||
help
|
||||
This tries to catch incorrect usage of cpu_has_feature() and
|
||||
mmu_has_feature() in the code.
|
||||
|
||||
If you don't know what this means, say N.
|
||||
|
||||
config FTR_FIXUP_SELFTEST
|
||||
bool "Run self-tests of the feature-fixup code"
|
||||
depends on DEBUG_KERNEL
|
||||
|
|
|
@ -25,6 +25,14 @@ static __always_inline bool cpu_has_feature(unsigned long feature)
|
|||
|
||||
BUILD_BUG_ON(!__builtin_constant_p(feature));
|
||||
|
||||
#ifdef CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG
|
||||
if (!static_key_initialized) {
|
||||
printk("Warning! cpu_has_feature() used prior to jump label init!\n");
|
||||
dump_stack();
|
||||
return early_cpu_has_feature(feature);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (CPU_FTRS_ALWAYS & feature)
|
||||
return true;
|
||||
|
||||
|
|
|
@ -156,6 +156,14 @@ static __always_inline bool mmu_has_feature(unsigned long feature)
|
|||
|
||||
BUILD_BUG_ON(!__builtin_constant_p(feature));
|
||||
|
||||
#ifdef CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG
|
||||
if (!static_key_initialized) {
|
||||
printk("Warning! mmu_has_feature() used prior to jump label init!\n");
|
||||
dump_stack();
|
||||
return early_mmu_has_feature(feature);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!(MMU_FTRS_POSSIBLE & feature))
|
||||
return false;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче