762ff2f428
The call to _arch_switch is a giant screaming sign inviting optimizer bugs. The code that appears before is what happened long ago when we were switched out, but the version that EXECUTED just now is actually in a different thread. So the assignment to _current before the switch actually assigned OUR thread (the "new_thread" of the old context!) to _current. But obviously the optimizer looks at that code and assumes that the _current which got assigned to the thread we were switching to long ago is still correct, and used it when retrieving the swap return value. Obviously the real bug here is that the _arch_switch() in question lacked a memory clobber (and it's getting one). But we can remove two lines, remove code from inside the interrupt lock and make the implementation more robust by moving the read to after the irq_unlock() (which generally also has a memory clobber). 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 |