]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
kernel: add preemption models
authorThomas Richard <thomas.richard@bootlin.com>
Mon, 5 Jan 2026 12:46:52 +0000 (13:46 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 24 Jan 2026 21:52:49 +0000 (22:52 +0100)
Introduce preemption model selection with PREEMPT_NONE as the default.
PREEMPT_NONE is the traditional Linux preemption model and also the best
choice for servers.

Signed-off-by: Thomas Richard <thomas.richard@bootlin.com>
Link: https://github.com/openwrt/openwrt/pull/21413
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
config/Config-kernel.in

index 86920632292581830f3949f714b791698fa43961..870e53206a99abac9af1e2deb9dfaad389a9ce7b 100644 (file)
@@ -1492,3 +1492,72 @@ config KERNEL_WERROR
          and unusual warnings, or you have some architecture with problems,
          you may need to disable this config option in order to
          successfully build the kernel.
+
+choice
+       prompt "Preemption Model"
+       default KERNEL_PREEMPT_NONE
+
+config KERNEL_PREEMPT_NONE
+       bool "No Forced Preemption (Server)"
+       help
+         This is the traditional Linux preemption model, geared towards
+         throughput. It will still provide good latencies most of the
+         time, but there are no guarantees and occasional longer delays
+         are possible.
+
+         Select this option if you are building a kernel for a server or
+         scientific/computation system, or if you want to maximize the
+         raw processing power of the kernel, irrespective of scheduling
+         latencies.
+
+config KERNEL_PREEMPT_VOLUNTARY
+       bool "Voluntary Kernel Preemption (Desktop)"
+       help
+         This option reduces the latency of the kernel by adding more
+         "explicit preemption points" to the kernel code. These new
+         preemption points have been selected to reduce the maximum
+         latency of rescheduling, providing faster application reactions,
+         at the cost of slightly lower throughput.
+
+         This allows reaction to interactive events by allowing a
+         low priority process to voluntarily preempt itself even if it
+         is in kernel mode executing a system call. This allows
+         applications to run more 'smoothly' even when the system is
+         under load.
+
+         Select this if you are building a kernel for a desktop system.
+
+config KERNEL_PREEMPT
+       bool "Preemptible Kernel (Low-Latency Desktop)"
+       help
+         This option reduces the latency of the kernel by making
+         all kernel code (that is not executing in a critical section)
+         preemptible.  This allows reaction to interactive events by
+         permitting a low priority process to be preempted involuntarily
+         even if it is in kernel mode executing a system call and would
+         otherwise not be about to reach a natural preemption point.
+         This allows applications to run more 'smoothly' even when the
+         system is under load, at the cost of slightly lower throughput
+         and a slight runtime overhead to kernel code.
+
+         Select this if you are building a kernel for a desktop or
+         embedded system with latency requirements in the milliseconds
+         range.
+
+config KERNEL_PREEMPT_RT
+       bool "Fully Preemptible Kernel (Real-Time)"
+       depends on (x86_64 || aarch64 || riscv64)
+       help
+         This option turns the kernel into a real-time kernel by replacing
+         various locking primitives (spinlocks, rwlocks, etc.) with
+         preemptible priority-inheritance aware variants, enforcing
+         interrupt threading and introducing mechanisms to break up long
+         non-preemptible sections. This makes the kernel, except for very
+         low level and critical code paths (entry code, scheduler, low
+         level interrupt handling) fully preemptible and brings most
+         execution contexts under scheduler control.
+
+         Select this if you are building a kernel for systems which
+         require real-time guarantees.
+
+endchoice