linux/arch/arm64/kernel
Mark Rutland 127161aaf0 arm64: add runtime system sanity checks
Unexpected variation in certain system register values across CPUs is an
indicator of potential problems with a system. The kernel expects CPUs
to be mostly identical in terms of supported features, even in systems
with heterogeneous CPUs, with uniform instruction set support being
critical for the correct operation of userspace.

To help detect issues early where hardware violates the expectations of
the kernel, this patch adds simple runtime sanity checks on important ID
registers in the bring up path of each CPU.

Where CPUs are fundamentally mismatched, set TAINT_CPU_OUT_OF_SPEC.
Given that the kernel assumes CPUs are identical feature wise, let's not
pretend that we expect such configurations to work. Supporting such
configurations would require massive rework, and hopefully they will
never exist.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Will Deacon <will.deacon@arm.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2014-07-18 15:24:11 +01:00
..
vdso arm64: Align the kbuild output for VDSOL and VDSOA 2014-07-17 16:19:29 +01:00
.gitignore arm64: Build infrastructure 2012-09-17 13:42:21 +01:00
arm64ksyms.c arm64: Add ftrace support 2014-05-29 09:08:08 +01:00
asm-offsets.c arm64: kernel: cpu_{suspend/resume} implementation 2013-12-16 17:17:31 +00:00
cpu_ops.c arm64: kernel: enable PSCI cpu operations on UP systems 2014-07-18 15:23:25 +01:00
cpuinfo.c arm64: add runtime system sanity checks 2014-07-18 15:24:11 +01:00
cputable.c arm64: add CPU_HOTPLUG infrastructure 2013-10-25 11:33:21 +01:00
debug-monitors.c arm64: debug: remove noisy, pointless warning 2014-04-25 16:46:50 +01:00
efi-entry.S arm64: fix el2_setup check of CurrentEL 2014-07-04 16:16:52 +01:00
efi-stub.c arm64: efi: add EFI stub 2014-04-30 19:57:04 +01:00
efi.c arm64: efi: only attempt efi map setup if booting via EFI 2014-05-23 15:29:43 +01:00
entry-fpsimd.S arm64: add support for kernel mode NEON in interrupt context 2014-05-08 11:31:57 +02:00
entry-ftrace.S arm64: ftrace: Fix comment typo 'CONFIG_FUNCTION_GRAPH_FP_TEST' 2014-06-18 12:40:52 +01:00
entry.S arm64: Add __NR_* definitions for compat syscalls 2014-07-10 11:02:40 +01:00
fpsimd.c arm64: add support for kernel mode NEON in interrupt context 2014-05-08 11:31:57 +02:00
ftrace.c arm64: ftrace: Add dynamic ftrace support 2014-05-29 09:08:33 +01:00
head.S arm64: Enable TEXT_OFFSET fuzzing 2014-07-10 12:36:58 +01:00
hw_breakpoint.c arm64: is_compat_task is defined both in asm/compat.h and linux/compat.h 2014-05-12 16:43:29 +01:00
hyp-stub.S arm64: add hypervisor stub 2012-12-05 11:26:49 +00:00
image.h arm64: Update the Image header 2014-07-10 12:36:40 +01:00
insn.c arm64: introduce aarch64_insn_gen_{nop|branch_imm}() helper functions 2014-01-08 15:21:29 +00:00
io.c arm64: Device specific operations 2012-09-17 13:42:04 +01:00
irq.c arm64: use cpu_online_mask when using forced irq_set_affinity 2014-05-12 16:25:07 +01:00
jump_label.c arm64, jump label: optimize jump label implementation 2014-01-08 15:23:53 +00:00
kgdb.c arm64: KGDB: Add step debugging support 2014-02-26 11:16:25 +00:00
kuser32.S arm64: Add __NR_* definitions for compat syscalls 2014-07-10 11:02:40 +01:00
Makefile arm64: cpuinfo: record cpu system register values 2014-07-18 15:24:09 +01:00
module.c arm64: move encode_insn_immediate() from module.c to insn.c 2014-01-08 15:21:29 +00:00
perf_event.c arm64: fix !CONFIG_COMPAT build failures 2014-04-06 23:25:04 +01:00
perf_regs.c arm64: fix !CONFIG_COMPAT build failures 2014-04-06 23:25:04 +01:00
process.c arm64: Add CONFIG_CC_STACKPROTECTOR 2014-07-09 12:23:48 +01:00
psci.c arm64: kernel: add __init marker to PSCI init functions 2014-07-18 15:23:45 +01:00
ptrace.c arm64: audit: Add audit hook in syscall_trace_enter/exit() 2014-07-10 11:06:00 +01:00
return_address.c arm64: ftrace: Add CALLER_ADDRx macros 2014-05-29 09:08:33 +01:00
setup.c arm64: cpuinfo: record cpu system register values 2014-07-18 15:24:09 +01:00
signal32.c arm64: Add __NR_* definitions for compat syscalls 2014-07-10 11:02:40 +01:00
signal.c 2014-05-15 for-3.16 pull request 2014-05-16 10:05:11 +01:00
sleep.S arm64: kernel: cpu_{suspend/resume} implementation 2013-12-16 17:17:31 +00:00
smp_spin_table.c arm64: Remove boot thread synchronisation for spin-table release method 2014-05-09 15:47:46 +01:00
smp.c arm64: cpuinfo: record cpu system register values 2014-07-18 15:24:09 +01:00
stacktrace.c arm64: Add 'notrace' attribute to unwind_frame() for ftrace 2014-05-29 09:04:31 +01:00
suspend.c arm64: kernel: add missing __init section marker to cpu_suspend_init 2014-07-18 15:23:59 +01:00
sys32.S arm64: compat: correct register concatenation for syscall wrappers 2013-10-25 15:59:36 +01:00
sys_compat.c arm64: Add __NR_* definitions for compat syscalls 2014-07-10 11:02:40 +01:00
sys.c arm64: switch to generic sigaltstack 2013-02-14 09:17:29 -05:00
time.c arm64: kernel: initialize broadcast hrtimer based clock event device 2014-05-30 17:48:13 +01:00
topology.c arm64: topology: add MPIDR-based detection 2014-07-09 12:22:40 +01:00
traps.c arm64: Use pr_* instead of printk 2014-07-17 16:02:32 +01:00
vdso.c arm64: vdso: move data page before code pages 2014-07-17 16:18:57 +01:00
vmlinux.lds.S arm64: Enable TEXT_OFFSET fuzzing 2014-07-10 12:36:58 +01:00