According to the Linux source code and this topic : do system calls execute inside a software interrupt handler in entirety?
It seems that some system calls are handled entirely inside the interrupt handler (without considering vDSO system calls). This would mean that the system call blocks all other task execution until it blocks on a semaphore or leads to a yield.
My question: Does the Linux PREEMPT_RT patch correct these calls and how ?
Documentation says:
Converting interrupt handlers into preemptible kernel threads: The RT-Preempt patch treats soft interrupt handlers in kernel thread context, which is represented by a task_struct like a common user space process. However, it is also possible to register an IRQ in kernel context.
(source: https://rt.wiki.kernel.org/index.php/Frequently_Asked_Questions)
It seems to be deferred to a thread but the swi_handler code (arm) in the patched Linux kernel still calls the sys_* function in the handler.
Assuming that the system call is handled by a kernel thread with privileges (ring 0 / supervisor), does this kernel thread have the same execution priority as the calling thread?
It would make sense to avoid priority inversion.