linux_dsm_epyc7002/arch/arm64/kernel
James Morse 0067df413b KVM: arm64: Handle RAS SErrors from EL2 on guest exit
We expect to have firmware-first handling of RAS SErrors, with errors
notified via an APEI method. For systems without firmware-first, add
some minimal handling to KVM.

There are two ways KVM can take an SError due to a guest, either may be a
RAS error: we exit the guest due to an SError routed to EL2 by HCR_EL2.AMO,
or we take an SError from EL2 when we unmask PSTATE.A from __guest_exit.

The current SError from EL2 code unmasks SError and tries to fence any
pending SError into a single instruction window. It then leaves SError
unmasked.

With the v8.2 RAS Extensions we may take an SError for a 'corrected'
error, but KVM is only able to handle SError from EL2 if they occur
during this single instruction window...

The RAS Extensions give us a new instruction to synchronise and
consume SErrors. The RAS Extensions document (ARM DDI0587),
'2.4.1 ESB and Unrecoverable errors' describes ESB as synchronising
SError interrupts generated by 'instructions, translation table walks,
hardware updates to the translation tables, and instruction fetches on
the same PE'. This makes ESB equivalent to KVMs existing
'dsb, mrs-daifclr, isb' sequence.

Use the alternatives to synchronise and consume any SError using ESB
instead of unmasking and taking the SError. Set ARM_EXIT_WITH_SERROR_BIT
in the exit_code so that we can restart the vcpu if it turns out this
SError has no impact on the vcpu.

Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2018-01-16 15:09:36 +00:00
..
probes License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
vdso arm64 updates for 4.15 2017-11-15 10:56:56 -08:00
.gitignore
acpi_numa.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
acpi_parking_protocol.c
acpi.c arm64: acpi: Remove __init from acpi_psci_use_hvc() for use by SDEI 2018-01-14 18:49:49 +00:00
alternative.c arm64: alternatives: use tpidr_el2 on VHE hosts 2018-01-13 10:44:33 +00:00
arm64ksyms.c
armv8_deprecated.c arm64 updates for 4.15 2017-11-15 10:56:56 -08:00
asm-offsets.c KVM: arm64: Handle RAS SErrors from EL2 on guest exit 2018-01-16 15:09:36 +00:00
bpi.S arm64: Implement branch predictor hardening for Falkor 2018-01-08 18:47:07 +00:00
cacheinfo.c
cpu_errata.c arm64: cpu_errata: Add Kryo to Falkor 1003 errata 2018-01-14 18:49:52 +00:00
cpu_ops.c arm64: cpu_ops: Add missing 'const' qualifiers 2017-12-01 13:05:08 +00:00
cpu-reset.h
cpu-reset.S
cpufeature.c arm64: kernel: Prepare for a DISR user 2018-01-16 15:07:12 +00:00
cpuidle.c ARM64 / cpuidle: Use new cpuidle macro for entering retention state 2018-01-02 13:50:34 +00:00
cpuinfo.c arm64: v8.4: Support for new floating point multiplication instructions 2018-01-05 11:29:48 +00:00
crash_dump.c
debug-monitors.c arm64: introduce an order for exceptions 2017-11-02 15:55:41 +00:00
efi-entry.S
efi-header.S
efi.c
entry32.S
entry-fpsimd.S arm64/sve: Low-level SVE architectural state manipulation functions 2017-11-03 15:24:14 +00:00
entry-ftrace.S arm64: Fix static use of function graph 2017-11-03 12:05:23 +00:00
entry.S arm64: entry: Move the trampoline to be before PAN 2018-01-14 18:49:51 +00:00
fpsimd.c arm64: fpsimd: Fix state leakage when migrating after sigreturn 2018-01-16 14:39:50 +00:00
ftrace.c arm64: ftrace: emit ftrace-mod.o contents through code 2017-12-01 13:04:59 +00:00
head.S arm64: sysreg: Move to use definitions for all the SCTLR bits 2018-01-16 15:05:39 +00:00
hibernate-asm.S arm64: handle 52-bit addresses in TTBR 2017-12-22 17:35:21 +00:00
hibernate.c arm64: don't open code page table entry creation 2017-12-22 17:36:34 +00:00
hw_breakpoint.c
hyp-stub.S
image.h
insn.c
io.c arm64: Avoid aligning normal memory pointers in __memcpy_{to,from}io 2017-10-24 16:23:07 +01:00
irq.c arm64: Add vmap_stack header file 2018-01-13 10:45:03 +00:00
jump_label.c
kaslr.c
kgdb.c
kuser32.S
machine_kexec.c arm64: explicitly mask all exceptions 2017-11-02 15:55:40 +00:00
Makefile arm64: kernel: Add arch-specific SDEI entry code and CPU masking 2018-01-13 10:45:17 +00:00
module-plts.c arm64: ftrace: emit ftrace-mod.o contents through code 2017-12-01 13:04:59 +00:00
module.c
module.lds arm64: ftrace: emit ftrace-mod.o contents through code 2017-12-01 13:04:59 +00:00
paravirt.c
pci.c
perf_callchain.c
perf_event.c arm64: perf: remove unsupported events for Cortex-A73 2017-12-01 13:05:08 +00:00
perf_regs.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
process.c arm64: tls: Avoid unconditional zeroing of tpidrro_el0 for native tasks 2017-12-11 13:41:03 +00:00
psci.c
ptrace.c arm64/sve: ptrace and ELF coredump support 2017-11-03 15:24:18 +00:00
reloc_test_core.c
reloc_test_syms.S
relocate_kernel.S
return_address.c
sdei.c arm64: sdei: Add trampoline code for remapping the kernel 2018-01-14 18:49:50 +00:00
setup.c arm64: Move the async/fiq helpers to explicitly set process context flags 2017-11-02 15:55:41 +00:00
signal32.c arm64: fpsimd: Fix state leakage when migrating after sigreturn 2018-01-16 14:39:50 +00:00
signal.c arm64: fpsimd: Fix state leakage when migrating after sigreturn 2018-01-16 14:39:50 +00:00
sleep.S License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
smccc-call.S
smp_spin_table.c
smp.c arm64: kernel: Add arch-specific SDEI entry code and CPU masking 2018-01-13 10:45:17 +00:00
stacktrace.c arm64: stacktrace: avoid listing stacktrace functions in stacktrace 2017-09-13 18:53:16 -07:00
suspend.c arm64: uaccess: Add PAN helper 2018-01-13 10:45:10 +00:00
sys32.c
sys_compat.c
sys.c
time.c
topology.c arm64: Use of_cpu_node_to_id helper for CPU topology parsing 2018-01-02 16:43:12 +00:00
trace-events-emulation.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
traps.c arm64: kernel: Survive corrected RAS errors notified by SError 2018-01-16 15:06:28 +00:00
vdso.c
vmlinux.lds.S arm64: Extend early page table code to allow for larger kernels 2018-01-14 18:49:52 +00:00