Documentation/core-api/real-time/architecture-porting.rst
Source file repositories/reference/linux-study-clean/Documentation/core-api/real-time/architecture-porting.rst
File Facts
- System
- Linux kernel
- Corpus path
Documentation/core-api/real-time/architecture-porting.rst- Extension
.rst- Size
- 5556 bytes
- Lines
- 111
- Domain
- Support Tooling And Documentation
- Bucket
- Documentation
- Inferred role
- Support Tooling And Documentation: documentation
- Status
- atlas-only
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
- No top-level syscall, struct, function, initcall, or export declaration detected by the generator.
Annotated Snippet
.. SPDX-License-Identifier: GPL-2.0
=============================================
Porting an architecture to support PREEMPT_RT
=============================================
:Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
This list outlines the architecture specific requirements that must be
implemented in order to enable PREEMPT_RT. Once all required features are
implemented, ARCH_SUPPORTS_RT can be selected in architecture’s Kconfig to make
PREEMPT_RT selectable.
Many prerequisites (genirq support for example) are enforced by the common code
and are omitted here.
The optional features are not strictly required but it is worth to consider
them.
Requirements
------------
Forced threaded interrupts
CONFIG_IRQ_FORCED_THREADING must be selected. Any interrupts that must
remain in hard-IRQ context must be marked with IRQF_NO_THREAD. This
requirement applies for instance to clocksource event interrupts,
perf interrupts and cascading interrupt-controller handlers.
PREEMPTION support
Kernel preemption must be supported and requires that
CONFIG_ARCH_NO_PREEMPT remain unselected. Scheduling requests, such as those
issued from an interrupt or other exception handler, must be processed
immediately.
POSIX CPU timers and KVM
POSIX CPU timers must expire from thread context rather than directly within
the timer interrupt. This behavior is enabled by setting the configuration
option CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK.
When virtualization support, such as KVM, is enabled,
CONFIG_VIRT_XFER_TO_GUEST_WORK must also be set to ensure
that any pending work, such as POSIX timer expiration, is handled before
transitioning into guest mode.
Hard-IRQ and Soft-IRQ stacks
Soft interrupts are handled in the thread context in which they are raised. If
a soft interrupt is triggered from hard-IRQ context, its execution is deferred
to the ksoftirqd thread. Preemption is never disabled during soft interrupt
handling, which makes soft interrupts preemptible.
If an architecture provides a custom __do_softirq() implementation that uses a
separate stack, it must select CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK. The
functionality should only be enabled when CONFIG_SOFTIRQ_ON_OWN_STACK is set.
FPU and SIMD access in kernel mode
FPU and SIMD registers are typically not used in kernel mode and are therefore
not saved during kernel preemption. As a result, any kernel code that uses
these registers must be enclosed within a kernel_fpu_begin() and
kernel_fpu_end() section.
The kernel_fpu_begin() function usually invokes local_bh_disable() to prevent
interruptions from softirqs and to disable regular preemption. This allows the
protected code to run safely in both thread and softirq contexts.
On PREEMPT_RT kernels, however, kernel_fpu_begin() must not call
local_bh_disable(). Instead, it should use preempt_disable(), since softirqs
are always handled in thread context under PREEMPT_RT. In this case, disabling
preemption alone is sufficient.
The crypto subsystem operates on memory pages and requires users to "walk and
map" these pages while processing a request. This operation must occur outside
the kernel_fpu_begin()/ kernel_fpu_end() section because it requires preemption
to be enabled. These preemption points are generally sufficient to avoid
excessive scheduling latency.
Exception handlers
Annotation
- Atlas domain: Support Tooling And Documentation / Documentation.
- Implementation status: atlas-only.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.