zephyr/kernel
Andrew Boie f5a7e1a108 kernel: handle thread self-aborts on idle thread
Fixes races where threads on another CPU are joining the
exiting thread, since it could still be running when
the joiners wake up on a different CPU.

Fixes problems where the thread object is still being
used by the kernel when the fn_abort() function is called,
preventing the thread object from being recycled or
freed back to a slab pool.

Fixes a race where a thread is aborted from one CPU while
it self-aborts on another CPU, that was currently worked
around with a busy-wait.

Precedent for doing this comes from FreeRTOS, which also
performs final thread cleanup in the idle thread.

Some logic in z_thread_single_abort() rearranged such that
when we release sched_spinlock, the thread object pointer
is never dereferenced by the kernel again; join waiters
or fn_abort() logic may free it immediately.

An assertion added to z_thread_single_abort() to ensure
it never gets called with thread == _current outside of an ISR.

Some logic has been added to ensure z_thread_single_abort()
tasks don't run more than once.

Fixes: #26486
Related to: #23063 #23062

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2020-09-30 14:11:59 -04:00
..
include kernel: handle thread self-aborts on idle thread 2020-09-30 14:11:59 -04:00
atomic_c.c kernel: Add k_heap synchronized memory allocator 2020-04-14 10:05:55 -07:00
cache_handlers.c syscalls: Add system call for cache flush & invalidate 2020-08-04 17:26:45 -04:00
CMakeLists.txt kernel: Deprecate CONFIG_MULTITHREADING 2020-09-23 15:50:32 -05:00
compiler_stack_protect.c kernel: Fix gcc-9.2 warning with _StackCheckHandler 2019-10-04 05:22:30 -07:00
device.c kernel: device: invert sense of ready bit 2020-09-15 18:22:38 +02:00
errno.c headers: Refactor kernel and arch headers. 2019-11-06 16:07:32 -08:00
fatal.c debug/coredump: add a primitive coredump mechanism 2020-08-24 20:28:24 -04:00
futex.c kernel/timeout: Make timeout arguments an opaque type 2020-03-31 19:40:47 -04:00
idle.c kernel: handle thread self-aborts on idle thread 2020-09-30 14:11:59 -04:00
init.c kernel: handle thread self-aborts on idle thread 2020-09-30 14:11:59 -04:00
Kconfig kernel: handle thread self-aborts on idle thread 2020-09-30 14:11:59 -04:00
kheap.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
mailbox.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
mem_domain.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
mem_slab.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
mempool_sys.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
mempool.c kernel: Refactor k_mem_pool APIs into a base and derived level 2020-04-14 10:05:55 -07:00
mmu.c kernel: demote k_mem_map to z_mem_map 2020-09-03 14:24:38 -04:00
msg_q.c doc: Clarify semantics of k_msgq_put 2020-09-23 13:21:07 -05:00
mutex.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
pipes.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
poll.c kernel: cleanup header inclusion 2020-06-25 16:12:36 -05:00
queue.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
sched.c kernel: handle thread self-aborts on idle thread 2020-09-30 14:11:59 -04:00
sem.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
smp.c kernel: smp: avoid identifier collisions 2020-07-25 21:26:15 -04:00
stack.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
system_work_q.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
thread_abort.c kernel: handle thread self-aborts on idle thread 2020-09-30 14:11:59 -04:00
thread.c kernel: Apply IRQ offload API change 2020-09-02 13:48:13 +02:00
timeout.c kernel: avoid implementation-defined behavior in timeout calculation 2020-09-17 22:19:35 -04:00
timer.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
userspace_handler.c userspace: update k_object API to support immutable objects 2020-09-02 13:48:13 +02:00
userspace.c device: Const-ify all device driver instance pointers 2020-09-02 13:48:13 +02:00
version.c zephyr: replace zephyr integer types with C99 types 2020-06-08 08:23:57 -05:00
work_q.c kernel: Add k_delayed_work_pending to check if work has been submitted 2020-08-04 17:32:56 +02:00