This has not bitten us yet, but it was a ticking timebomb. This is similar to the issue that was found with irq_lock/irq_unlock implementations on several architectures. Having a volatile variable is not the way to force the sched_lock variable to be incremented/decremented around the accesses to data it protects. Instead, a compiler barrier must prevent the compiler from reordering the memory accesses around setting of sched_lock. Needed in the inline implementations _sched_lock()/_sched_unlock_no_reschedule(), which resolve to simple decrement/increment of the per-thread sched_lock variable. Change-Id: I06f5b3524889f193efe69caa947118404b1be0b5 Signed-off-by: Benjamin Walsh <walsh.benj@gmail.com> |
||
|---|---|---|
| .. | ||
| gen_offset.h | ||
| kernel_offsets.h | ||
| kernel_structs.h | ||
| ksched.h | ||
| nano_internal.h | ||
| offsets_short.h | ||
| timeout_q.h | ||
| wait_q.h | ||