Table of Contents

Known Limitations

Some environments are currently not working well with Preempt-RT. Here is an overview of known limitations and workarounds. Patches fixing the known limitations are welcome!

Disabled CONFIG_ options

Several features are disabled by CONFIG_PREEMPT_RT=y because of incompatibility.

A more detailed information, why a specific config option is deactivated, is required!

Disabled config options:

Platforms

Raspberry PI 2 and 3

The Raspberry PI 3 is currently not part of the mainline kernel and requires an out of tree patch for its Support. This support also includes an USB driver which may lock up the RT System. Possible workarounds:

dwc_otg.fiq_enable=0
dwc_otg.fiq_fsm_enable=0

Runtime

Code live patching on ARM

ARM is using stop_machine() while patching assembly opcodes at run time which can cause high latencies. This means “jump labels” support is deactivated because it may be used for instance by changing scheduler options. kprobe and kgdb is also patching code at run time but are not disabled. They should only be used in a development environment for debug so it should be safe.

pthread_cond_{wait|signal}

The pthread_cond_t variable in glibc implementation contains a mutex. This mutex can not be initialized as PI. More information can be found in glibc's bug report.

EFI

EFI runtime services are disabled because using them may case high latencies. This includes accessing the RTC device or updating the variables. If you need to use the EFI runtime services add efi=runtime to the kernel command line.

Memory compaction

With CONFIG_COMPACTION=y the kernel may change the physical address for an existing virtual address. This may lead to a minor page fault and may happen even to pages which are protected with mlock(). In order to avoid memory compaction on mlock() pages exclude them via

echo 0 > /proc/sys/vm/compact_unevictable_allowed