mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-07 14:23:07 +00:00
When a MetaIRQ preempts a cooperative thread, that thread would be added back to the generic run queue. When the MetaIRQ is done, the highest priority thread will be selected to run, which may obviously be a cooperative thread of a higher priority than the one that was preempted. But that's wrong, because the original thread was promised that it would NOT be preempted until it reached a scheduling point on its own (that's the whole point of a cooperative thread, of course). We need to track the thread that got preempted (one per CPU) and return to it instead of whatever else the scheduler might have found. Fixes #20255 Signed-off-by: Andy Ross <andrew.j.ross@intel.com> |
||
---|---|---|
.. | ||
include | ||
atomic_c.c | ||
CMakeLists.txt | ||
compiler_stack_protect.c | ||
device.c | ||
errno.c | ||
fatal.c | ||
futex.c | ||
idle.c | ||
init.c | ||
Kconfig | ||
Kconfig.power_mgmt | ||
mailbox.c | ||
mem_domain.c | ||
mem_slab.c | ||
mempool.c | ||
msg_q.c | ||
mutex.c | ||
pipes.c | ||
poll.c | ||
queue.c | ||
sched.c | ||
sem.c | ||
smp.c | ||
stack.c | ||
system_work_q.c | ||
thread_abort.c | ||
thread.c | ||
timeout.c | ||
timer.c | ||
userspace_handler.c | ||
userspace.c | ||
version.c | ||
work_q.c |