The mutex locking was written to use k_sched_lock(), which doesn't work as a synchronization primitive if there is another CPU running (it prevents the current CPU from preempting the thread, it says nothing about what the others are doing). Use the pre-existing spinlock for all synchronization. One wrinkle is that the priority code was needing to call z_thread_priority_set(), which is a rescheduling call that cannot be called with a lock held. So that got split out with a low level utility that can update the schedule state but allow the caller to defer yielding until later. Fixes #17584 Signed-off-by: Andy Ross <andrew.j.ross@intel.com> |
||
|---|---|---|
| .. | ||
| gen_offset.h | ||
| kernel_internal.h | ||
| kernel_offsets.h | ||
| kernel_structs.h | ||
| ksched.h | ||
| kswap.h | ||
| offsets_short.h | ||
| syscall_handler.h | ||
| timeout_q.h | ||
| wait_q.h | ||