zephyr/kernel
Andy Ross eefd3daa81 kernel/smp: arch/x86_64: Address race with CPU migration
Use of the _current_cpu pointer cannot be done safely in a preemptible
context.  If a thread is preempted and migrates to another CPU, the
old CPU record will be wrong.

Add a validation assert to the expression that catches incorrect
usages, and fix up the spots where it was wrong (most important being
a few uses of _current outside of locks, and the arch_is_in_isr()
implementation).

Note that the resulting _current expression now requires locking and
is going to be somewhat slower.  Longer term it's going to be better
to augment the arch API to allow SMP architectures to implement a
faster "get current thread pointer" action than this default.

Note also that this change means that "_current" is no longer
expressible as an lvalue (long ago, it was just a static variable), so
the places where it gets assigned now assign to _current_cpu->current
instead.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2020-02-08 08:51:04 -05:00
..
include kernel/smp: arch/x86_64: Address race with CPU migration 2020-02-08 08:51:04 -05:00
atomic_c.c
CMakeLists.txt cmake: Add target for generating header files 2020-01-29 11:44:57 -06:00
compiler_stack_protect.c
device.c kernel: device: Add const qualifier to device_config 2020-01-22 06:32:36 -06:00
errno.c
fatal.c kernel: rename z_arch_ to arch_ 2019-11-07 15:21:46 -08:00
futex.c kernel: rename z_arch_ to arch_ 2019-11-07 15:21:46 -08:00
idle.c kernel: rename z_arch_ to arch_ 2019-11-07 15:21:46 -08:00
init.c kernel/smp: arch/x86_64: Address race with CPU migration 2020-02-08 08:51:04 -05:00
Kconfig kernel: kconfig: Make SCHED_IPI_SUPPORTED invisible 2020-01-20 18:38:10 -05:00
Kconfig.power_mgmt
mailbox.c global: Remove leading/trailing blank lines in files 2019-12-11 19:17:27 +01:00
mem_domain.c kernel: fix k_mem_partition data types 2019-12-12 14:48:42 -08:00
mem_slab.c kernel: mem_slab: error handling 2020-01-20 17:19:54 -05:00
mempool.c mempool: use k_malloc heap for ISR allocations 2020-01-24 09:27:59 -08:00
msg_q.c kernel: msgq: error handling 2020-01-20 17:19:54 -05:00
mutex.c tracing: move headers under include/tracing 2020-02-07 15:58:05 -05:00
pipes.c kernel: pipe: runtime error checking 2020-01-20 17:19:54 -05:00
poll.c kernel: poll: Allow 0 event input 2020-01-03 11:26:46 -08:00
queue.c kernel/queue: Fix SMP race 2020-01-21 14:47:52 -08:00
sched.c kernel/smp: arch/x86_64: Address race with CPU migration 2020-02-08 08:51:04 -05:00
sem.c tracing: move headers under include/tracing 2020-02-07 15:58:05 -05:00
smp.c kernel/smp: arch/x86_64: Address race with CPU migration 2020-02-08 08:51:04 -05:00
stack.c kernel: stack: error handling 2020-01-20 17:19:54 -05:00
system_work_q.c
thread_abort.c kernel/sched: Move thread suspend and abort under the scheduler lock 2020-01-08 14:21:10 +01:00
thread.c kernel: overhaul unused stack measurement 2020-02-08 10:02:35 +02:00
timeout.c kernel/sys_clock.h: Deprecate and convert uses of old conversions 2019-11-08 11:08:58 +01:00
timer.c kernel/sys_clock.h: Deprecate and convert uses of old conversions 2019-11-08 11:08:58 +01:00
userspace_handler.c
userspace.c kernel: use 'thread' for thread variable consistently 2019-12-21 19:57:57 -05:00
version.c
work_q.c kernel: work_q: error handling 2020-01-20 17:19:54 -05:00