mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 08:15:07 -04:00
Documentation: document panic_on_unrecoverable_memory_failure sysctl
Add documentation for the new vm.panic_on_unrecoverable_memory_failure sysctl, describing which failures trigger a panic (kernel-owned pages the handler cannot recover) and which are intentionally left out (transient allocator races and unclassified pages). Link: https://lore.kernel.org/20260630-ecc_panic-v10-5-c6ed5b62eea2@debian.org Signed-off-by: Breno Leitao <leitao@debian.org> Acked-by: Miaohe Lin <linmiaohe@huawei.com> Cc: David Hildenbrand (Arm) <david@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Lance Yang <lance.yang@linux.dev> Cc: Liam R. Howlett <liam@infradead.org> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: Naoya Horiguchi <nao.horiguchi@gmail.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
3e0659f93b
commit
97b03277ce
@@ -67,6 +67,7 @@ Currently, these files are in /proc/sys/vm:
|
||||
- page-cluster
|
||||
- page_lock_unfairness
|
||||
- panic_on_oom
|
||||
- panic_on_unrecoverable_memory_failure
|
||||
- percpu_pagelist_high_fraction
|
||||
- stat_interval
|
||||
- stat_refresh
|
||||
@@ -925,6 +926,85 @@ panic_on_oom=2+kdump gives you very strong tool to investigate
|
||||
why oom happens. You can get snapshot.
|
||||
|
||||
|
||||
panic_on_unrecoverable_memory_failure
|
||||
======================================
|
||||
|
||||
When a hardware memory error (e.g. multi-bit ECC) hits a kernel page
|
||||
that cannot be recovered by the memory failure handler, the default
|
||||
behaviour is to ignore the error and continue operation. This is
|
||||
dangerous because the corrupted data remains accessible to the kernel,
|
||||
risking silent data corruption or a delayed crash when the poisoned
|
||||
memory is next accessed.
|
||||
|
||||
When enabled, this sysctl triggers a panic on memory failure events
|
||||
hitting kernel-owned pages that the handler cannot recover:
|
||||
``PageReserved`` (firmware reservations, kernel image, vDSO, zero
|
||||
page, and similar memblock-reserved regions), ``PageSlab``,
|
||||
``PageTable``, and ``PageLargeKmalloc``. These are owned by the
|
||||
kernel and the memory failure handler cannot reliably evict their
|
||||
contents.
|
||||
|
||||
Other unrecoverable kernel-owned populations (vmalloc allocations,
|
||||
kernel stack pages, ...) are not currently covered because the
|
||||
handler has no page-type signal that distinguishes them from a
|
||||
userspace folio temporarily off the LRU during migration or
|
||||
compaction. Such pages still go through the standard
|
||||
MF_MSG_GET_HWPOISON path: ``PG_hwpoison`` is set on them and a
|
||||
delayed crash on the next access remains possible. Coverage may
|
||||
grow as the handler gains stronger kernel-ownership signals.
|
||||
|
||||
Recoverable failure paths are also intentionally left out: in-flight
|
||||
buddy allocations and other transient races with the page allocator
|
||||
can reach the same diagnostic, and panicking on them would risk
|
||||
killing the box for a page destined for userspace where the standard
|
||||
SIGBUS recovery path applies. Pages whose state could not be
|
||||
classified at all are not covered either, since an unknown state is
|
||||
not a sound basis for a panic decision.
|
||||
|
||||
For many environments it is preferable to panic immediately with a clean
|
||||
crash dump that captures the original error context, rather than to
|
||||
continue and face a random crash later whose cause is difficult to
|
||||
diagnose.
|
||||
|
||||
Use cases
|
||||
---------
|
||||
|
||||
This option is most useful in environments where unattributed crashes
|
||||
are expensive to debug or where data integrity must take precedence
|
||||
over availability:
|
||||
|
||||
* Large fleets, where multi-bit ECC errors on kernel pages are observed
|
||||
regularly and post-mortem analysis of an unrelated downstream crash
|
||||
(often seconds to minutes after the original error) consumes
|
||||
significant engineering effort.
|
||||
|
||||
* Systems configured with kdump, where panicking at the moment of the
|
||||
hardware error produces a vmcore that still contains the faulting
|
||||
address, the affected page state, and the originating MCE/GHES
|
||||
record — context that is typically lost by the time a delayed crash
|
||||
occurs.
|
||||
|
||||
* High-availability clusters that rely on fast, deterministic node
|
||||
failure for failover, and prefer an immediate panic over silent data
|
||||
corruption propagating to replicas or persistent storage.
|
||||
|
||||
* Kernel and platform developers reproducing hwpoison issues with
|
||||
tools such as ``mce-inject`` or error-injection debugfs interfaces,
|
||||
where panicking on the unrecoverable path makes regressions
|
||||
immediately visible instead of surfacing as later, unrelated
|
||||
failures.
|
||||
|
||||
= =====================================================================
|
||||
0 Try to continue operation (default).
|
||||
1 Panic immediately. If the ``panic`` sysctl is also non-zero then the
|
||||
machine will be rebooted.
|
||||
= =====================================================================
|
||||
|
||||
Example::
|
||||
|
||||
echo 1 > /proc/sys/vm/panic_on_unrecoverable_memory_failure
|
||||
|
||||
|
||||
percpu_pagelist_high_fraction
|
||||
=============================
|
||||
|
||||
|
||||
Reference in New Issue
Block a user