Skip to content

Commit 8effeaa

Browse files
mrutland-armwildea01
authored andcommitted
arm64: dump cpu_hwcaps at panic time
When debugging a kernel panic(), it can be useful to know which CPU features have been detected by the kernel, as some code paths can depend on these (and may have been patched at runtime). This patch adds a notifier to dump the detected CPU caps (as a hex string) at panic(), when we log other information useful for debugging. On a Juno R1 system running v4.12-rc5, this looks like: [ 615.431249] Kernel panic - not syncing: Fatal exception in interrupt [ 615.437609] SMP: stopping secondary CPUs [ 615.441872] Kernel Offset: disabled [ 615.445372] CPU features: 0x02086 [ 615.448522] Memory Limit: none A developer can decode this by looking at the corresponding <asm/cpucaps.h> bits. For example, the above decodes as: * bit 1: ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE * bit 2: ARM64_WORKAROUND_845719 * bit 7: ARM64_WORKAROUND_834220 * bit 13: ARM64_HAS_32BIT_EL0 Signed-off-by: Mark Rutland <mark.rutland@arm.com> Acked-by: Steve Capper <steve.capper@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Suzuki K Poulose <suzuki.poulose@arm.com> Cc: Will Deacon <will.deacon@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
1 parent 936eb65 commit 8effeaa

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

arch/arm64/kernel/cpufeature.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,25 @@ unsigned int compat_elf_hwcap2 __read_mostly;
5151
DECLARE_BITMAP(cpu_hwcaps, ARM64_NCAPS);
5252
EXPORT_SYMBOL(cpu_hwcaps);
5353

54+
static int dump_cpu_hwcaps(struct notifier_block *self, unsigned long v, void *p)
55+
{
56+
/* file-wide pr_fmt adds "CPU features: " prefix */
57+
pr_emerg("0x%*pb\n", ARM64_NCAPS, &cpu_hwcaps);
58+
return 0;
59+
}
60+
61+
static struct notifier_block cpu_hwcaps_notifier = {
62+
.notifier_call = dump_cpu_hwcaps
63+
};
64+
65+
static int __init register_cpu_hwcaps_dumper(void)
66+
{
67+
atomic_notifier_chain_register(&panic_notifier_list,
68+
&cpu_hwcaps_notifier);
69+
return 0;
70+
}
71+
__initcall(register_cpu_hwcaps_dumper);
72+
5473
DEFINE_STATIC_KEY_ARRAY_FALSE(cpu_hwcap_keys, ARM64_NCAPS);
5574
EXPORT_SYMBOL(cpu_hwcap_keys);
5675

0 commit comments

Comments
 (0)