summaryrefslogtreecommitdiff
path: root/kernel/thread_abort.c
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2016-12-17 17:48:47 -0500
committerAnas Nashif <anas.nashif@intel.com>2016-12-19 14:59:35 -0500
commitd687a95611bbd737fa56ba0a99a3e65255715cac (patch)
tree7f472cc8d694f95b3dfdd5fcdcd03e824f5a43ef /kernel/thread_abort.c
parent9463dc0b8f0ae9916b410cb9e5f9ce8e758cc5ad (diff)
kernel: move kernel code to kernel/ directly
Also remove mentions of unified kernel in various places in the kernel, samples and documentation. Change-Id: Ice43bc73badbe7e14bae40fd6f2a302f6528a77d Signed-off-by: Anas Nashif <anas.nashif@intel.com>
Diffstat (limited to 'kernel/thread_abort.c')
-rw-r--r--kernel/thread_abort.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/kernel/thread_abort.c b/kernel/thread_abort.c
new file mode 100644
index 000000000..289b5e7c7
--- /dev/null
+++ b/kernel/thread_abort.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2016 Wind River Systems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * @brief Primitive for aborting a thread when an arch-specific one is not
+ * needed..
+ */
+
+#include <kernel.h>
+#include <kernel_structs.h>
+#include <nano_internal.h>
+#include <string.h>
+#include <toolchain.h>
+#include <sections.h>
+#include <wait_q.h>
+#include <ksched.h>
+
+extern void _k_thread_single_abort(struct k_thread *thread);
+
+#if !defined(CONFIG_ARCH_HAS_THREAD_ABORT)
+void k_thread_abort(k_tid_t thread)
+{
+ unsigned int key;
+
+ key = irq_lock();
+
+ _k_thread_single_abort(thread);
+ _thread_monitor_exit(thread);
+
+ if (_current == thread) {
+ _Swap(key);
+ CODE_UNREACHABLE;
+ }
+
+ /* The abort handler might have altered the ready queue. */
+ _reschedule_threads(key);
+}
+#endif
+
+/* legacy API */
+
+void task_abort_handler_set(void (*func)(void))
+{
+ _current->fn_abort = func;
+}