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:
Breno Leitao
2026-06-30 05:46:08 -07:00
committed by Andrew Morton
parent 3e0659f93b
commit 97b03277ce

View File

@@ -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
=============================