Go to file
James Morse feba61061b BACKPORT: ACPI / APEI: Kick the memory_failure() queue for synchronous errors
memory_failure() offlines or repairs pages of memory that have been
discovered to be corrupt. These may be detected by an external
component, (e.g. the memory controller), and notified via an IRQ.
In this case the work is queued as not all of memory_failure()s work
can happen in IRQ context.

If the error was detected as a result of user-space accessing a
corrupt memory location the CPU may take an abort instead. On arm64
this is a 'synchronous external abort', and on a firmware first
system it is replayed using NOTIFY_SEA.

This notification has NMI like properties, (it can interrupt
IRQ-masked code), so the memory_failure() work is queued. If we
return to user-space before the queued memory_failure() work is
processed, we will take the fault again. This loop may cause platform
firmware to exceed some threshold and reboot when Linux could have
recovered from this error.

For NMIlike notifications keep track of whether memory_failure() work
was queued, and make task_work pending to flush out the queue.
To save memory allocations, the task_work is allocated as part of
the ghes_estatus_node, and free()ing it back to the pool is deferred.

This patch is needed because Quicksilver firmware-first error handling
uses the SDEI notification type for communication between trusted
firmware and the OS. This adds needed NMI and SDEI functionality so
that the SDEI path in the kernel through APEI acts as an NMI and is
properly wired up to the APEI interfaces.

Backported from: https://patchwork.kernel.org/patch/10786981/

Cherry pick from: ac5d13a052

Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Tyler Baicar <tyler@amperecomputing.com>
2021-03-16 16:43:59 +08:00
Documentation net: change TCP_TIMEWAIT_LEN on runtime 2021-03-16 16:43:58 +08:00
LICENSES Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
arch BACKPORT: Split the old READ_IMPLIES_EXEC workaround from executable 2021-03-16 16:43:59 +08:00
block scsi: block: Fix a race in the runtime power management code 2021-03-16 16:43:51 +08:00
certs Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
crypto crypto: ecdh - avoid unaligned accesses in ecdh_set_secret() 2021-03-16 16:43:29 +08:00
drivers BACKPORT: ACPI / APEI: Kick the memory_failure() queue for synchronous errors 2021-03-16 16:43:59 +08:00
fs BACKPORT: Split the old READ_IMPLIES_EXEC workaround from executable 2021-03-16 16:43:59 +08:00
include BACKPORT: ACPI / APEI: Kick the memory_failure() queue for synchronous errors 2021-03-16 16:43:59 +08:00
init initramfs: fix clang build failure 2021-03-16 16:43:21 +08:00
ipc ipc/util.c: sysvipc_find_ipc() incorrectly updates position index 2021-03-16 16:27:51 +08:00
kernel merge bpf_jiffies64 api from 5576b991e9c1a11d2cc21c4b94fc75ec27603896 2021-03-16 16:43:59 +08:00
lib lib/syscall: fix syscall registers retrieval on 32-bit platforms 2021-03-16 16:42:06 +08:00
mm BACKPORT: mm/memory-failure: Add memory_failure_queue_kick() 2021-03-16 16:43:59 +08:00
net merge bpf_jiffies64 api from 5576b991e9c1a11d2cc21c4b94fc75ec27603896 2021-03-16 16:43:59 +08:00
package hwmon: Add Ampere Altra HW monitor driver 2021-03-16 16:43:59 +08:00
samples samples: bpf: Fix lwt_len_hist reusing previous BPF map 2021-03-16 16:42:53 +08:00
scripts kconfig: fix return value of do_error_if() 2021-03-16 16:43:19 +08:00
security ima: Don't modify file descriptor mode on the fly 2021-03-16 16:43:35 +08:00
sound ALSA: pcm: Clear the full allocated memory at hw_params 2021-03-16 16:43:56 +08:00
tools merge bpf_get_netns_cookie from f318903c0bf42448b4c884732df2bbb0ef7a2284. 2021-03-16 16:43:59 +08:00
usr Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
virt KVM: arm64: vgic-v3: Drop the reporting of GICR_TYPER.Last for userspace 2021-03-16 16:41:35 +08:00
.clang-format Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
.cocciconfig Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
.get_maintainer.ignore Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
.gitattributes Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
.gitignore Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
COPYING Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
CREDITS Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
Kbuild Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
Kconfig Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
MAINTAINERS Documentation/llvm: add documentation on building w/ Clang/LLVM 2021-03-16 16:34:24 +08:00
Makefile Rebase to linux long term 5.4.87 2021-03-16 16:43:57 +08:00
README Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
README.md Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
backport_remove_lists.txt Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
tools_key.pub Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00

README.md

Tencent Linux Kernel 4.0