| /* |
| * Copyright (c) 2016 Wind River Systems, Inc. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief Primitive for aborting a thread when an arch-specific one is not |
| * needed.. |
| */ |
| |
| #include <kernel.h> |
| #include <kernel_structs.h> |
| #include <kernel_internal.h> |
| #include <kswap.h> |
| #include <string.h> |
| #include <toolchain.h> |
| #include <linker/sections.h> |
| #include <wait_q.h> |
| #include <ksched.h> |
| #include <sys/__assert.h> |
| #include <syscall_handler.h> |
| |
| #if !defined(CONFIG_ARCH_HAS_THREAD_ABORT) |
| void z_impl_k_thread_abort(k_tid_t thread) |
| { |
| z_thread_single_abort(thread); |
| |
| /* If we're in an interrupt handler, we reschedule on the way out |
| * anyway, nothing needs to be done here. |
| */ |
| if (!arch_is_in_isr()) { |
| if (thread == _current) { |
| /* Direct use of swap: reschedule doesn't have a test |
| * for "is _current dead" and we don't want one for |
| * performance reasons. |
| */ |
| z_swap_unlocked(); |
| } else { |
| z_reschedule_unlocked(); |
| } |
| } |
| } |
| #endif |