c3046f417a
The switch_handle field in the thread struct is used as an atomic flag between CPUs in SMP, and has been known for a long time to technically require memory barriers for correct operation. We have an API for that now, so put them in: * The code immediately before arch_switch() needs a write barrier to ensure that thread state written by the scheduler is seen to happen before the outgoing thread is flagged with a valid switch handle. * The loop in z_sched_switch_spin() needs a read barrier at the end, to make sure the calling context doesn't load state from before the other CPU stored the switch handle. Also, that same spot in switch_spin was spinning with interrupts held, which means it needs a call to arch_spin_relax() to avoid a FPU state deadlock on some architectures. Signed-off-by: Andy Ross <andyross@google.com> |
||
---|---|---|
.. | ||
gen_offset.h | ||
kernel_arch_interface.h | ||
kernel_internal.h | ||
kernel_offsets.h | ||
kernel_tls.h | ||
ksched.h | ||
kswap.h | ||
mmu.h | ||
offsets_short.h |