[PATCH 2/2] docs: sched-preemption: Fix the list of runtime-selectable models

From: Jinjie Ruan

Date: Tue Oct 27 2026 - 22:44:33 EST


CONFIG_PREEMPT_DYNAMIC now depends on CONFIG_ARCH_HAS_PREEMPT_LAZY, so the
none and voluntary models can no longer be selected at runtime; passing
either to preempt= is rejected with "Dynamic Preempt: unsupported mode".

Drop them from the table of runtime-selectable models, and describe the
build-time situation instead of implying the choice simply depends on the
architecture offering lazy preemption. Keep the per-model descriptions
below, which still explain how a scheduling request is honoured under
models used by other kernels.

Signed-off-by: Jinjie Ruan <ruanjinjie@xxxxxxxxxx>
---
Documentation/scheduler/sched-preemption.rst | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/Documentation/scheduler/sched-preemption.rst b/Documentation/scheduler/sched-preemption.rst
index b48e53587a7a..0b5ddf7d26f2 100644
--- a/Documentation/scheduler/sched-preemption.rst
+++ b/Documentation/scheduler/sched-preemption.rst
@@ -20,9 +20,6 @@ change.
The models selectable at runtime are:

========= ====================================================
- none No preemption of kernel code other than at explicit
- ``cond_resched()`` / blocking points.
- voluntary As ``none``, plus ``might_sleep()`` sites.
full Any section that is not explicitly preempt disabled
may be preempted at any time.
lazy As ``full``, except that the scheduling request is
@@ -31,10 +28,12 @@ The models selectable at runtime are:
apply to real-time tasks.
========= ====================================================

-Not every model is available on every kernel. An architecture that provides
-lazy-preempt support offers only ``full`` and ``lazy``, and ``none`` and
-``voluntary`` are rejected there. A PREEMPT_RT kernel always offers ``full``,
-and ``lazy`` as well if the architecture provides it.
+CONFIG_PREEMPT_DYNAMIC depends on CONFIG_ARCH_HAS_PREEMPT_LAZY, so ``none``
+and ``voluntary`` are never selectable at runtime; passing either is
+rejected with "Dynamic Preempt: unsupported mode". The two models are only
+left as build-time choices on architectures without lazy-preempt support.
+A PREEMPT_RT kernel always offers ``full``, and ``lazy`` as well if the
+architecture provides it.

The model that is actually active is reported in the boot log::

--
2.34.1