On Tue, Apr 13 2021 at 14:19, Song Chen wrote:
In general, irq handler thread will be assigned a default priority which
is MAX_RT_PRIO/2, as a result, no one can preempt others.
Here is the case I found in a real project, an interrupt int_a is
coming, wakes up its handler handler_a and handler_a wakes up a
userspace RT process task_a.
However, if another irq handler handler_b which has nothing to do
with any RT tasks is running when int_a is coming, handler_a can't
preempt handler_b, as a result, task_a can't be waken up immediately
as expected until handler_b gives up cpu voluntarily. In this case,
determinism breaks.
It breaks because the system designer failed to assign proper priorities
to the irq threads int_a, int_b and to the user space process task_a.
That's not solvable at the kernel level.
Thanks,
tglx