kernel: convert mutex APIs to system calls
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
diff --git a/kernel/mutex.c b/kernel/mutex.c
index 7f9651f..88e1bfd 100644
--- a/kernel/mutex.c
+++ b/kernel/mutex.c
@@ -35,6 +35,7 @@
#include <debug/object_tracing_common.h>
#include <errno.h>
#include <init.h>
+#include <syscall_handler.h>
#define RECORD_STATE_CHANGE(mutex) do { } while ((0))
#define RECORD_CONFLICT(mutex) do { } while ((0))
@@ -66,7 +67,7 @@
#endif /* CONFIG_OBJECT_TRACING */
-void k_mutex_init(struct k_mutex *mutex)
+void _impl_k_mutex_init(struct k_mutex *mutex)
{
mutex->owner = NULL;
mutex->lock_count = 0;
@@ -80,6 +81,19 @@
_k_object_init(mutex);
}
+#ifdef CONFIG_USERSPACE
+u32_t _handler_k_mutex_init(u32_t mutex, u32_t arg2, u32_t arg3,
+ u32_t arg4, u32_t arg5, u32_t arg6, void *ssf)
+{
+ _SYSCALL_ARG1;
+
+ _SYSCALL_IS_OBJ(mutex, K_OBJ_MUTEX, 1, ssf);
+ _impl_k_mutex_init((struct k_mutex *)mutex);
+
+ return 0;
+}
+#endif
+
static int new_prio_for_inheritance(int target, int limit)
{
int new_prio = _is_prio_higher(target, limit) ? target : limit;
@@ -102,7 +116,7 @@
}
}
-int k_mutex_lock(struct k_mutex *mutex, s32_t timeout)
+int _impl_k_mutex_lock(struct k_mutex *mutex, s32_t timeout)
{
int new_prio, key;
@@ -188,7 +202,18 @@
return -EAGAIN;
}
-void k_mutex_unlock(struct k_mutex *mutex)
+#ifdef CONFIG_USERSPACE
+u32_t _handler_k_mutex_lock(u32_t mutex, u32_t timeout, u32_t arg3,
+ u32_t arg4, u32_t arg5, u32_t arg6, void *ssf)
+{
+ _SYSCALL_ARG2;
+
+ _SYSCALL_IS_OBJ(mutex, K_OBJ_MUTEX, 0, ssf);
+ return _impl_k_mutex_lock((struct k_mutex *)mutex, (s32_t)timeout);
+}
+#endif
+
+void _impl_k_mutex_unlock(struct k_mutex *mutex)
{
int key;
@@ -240,3 +265,15 @@
k_sched_unlock();
}
+
+#ifdef CONFIG_USERSPACE
+u32_t _handler_k_mutex_unlock(u32_t mutex, u32_t arg2, u32_t arg3,
+ u32_t arg4, u32_t arg5, u32_t arg6, void *ssf)
+{
+ _SYSCALL_ARG1;
+
+ _SYSCALL_IS_OBJ(mutex, K_OBJ_MUTEX, 0, ssf);
+ _impl_k_mutex_unlock((struct k_mutex *)mutex);
+ return 0;
+}
+#endif