Skip to content

Commit 989ebf6

Browse files
committed
kernel: add vrfy hooks to support userspace with condvar
Add needed vrfy hooks for userspace support. Signed-off-by: Anas Nashif <anas.nashif@intel.com>
1 parent 930789d commit 989ebf6

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

kernel/condvar.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <toolchain.h>
1010
#include <ksched.h>
1111
#include <wait_q.h>
12+
#include <syscall_handler.h>
1213

1314
static struct k_spinlock lock;
1415

@@ -19,6 +20,15 @@ int z_impl_k_condvar_init(struct k_condvar *condvar)
1920
return 0;
2021
}
2122

23+
#ifdef CONFIG_USERSPACE
24+
int z_vrfy_k_condvar_init(struct k_condvar *condvar)
25+
{
26+
Z_OOPS(Z_SYSCALL_OBJ_INIT(condvar, K_OBJ_CONDVAR));
27+
return z_impl_k_condvar_init(condvar);
28+
}
29+
#include <syscalls/k_condvar_init_mrsh.c>
30+
#endif
31+
2232
int z_impl_k_condvar_signal(struct k_condvar *condvar)
2333
{
2434
k_spinlock_key_t key = k_spin_lock(&lock);
@@ -34,6 +44,15 @@ int z_impl_k_condvar_signal(struct k_condvar *condvar)
3444
return 0;
3545
}
3646

47+
#ifdef CONFIG_USERSPACE
48+
int z_vrfy_k_condvar_signal(struct k_condvar *condvar)
49+
{
50+
Z_OOPS(Z_SYSCALL_OBJ(condvar, K_OBJ_CONDVAR));
51+
return z_impl_k_condvar_signal(condvar);
52+
}
53+
#include <syscalls/k_condvar_signal_mrsh.c>
54+
#endif
55+
3756
int z_impl_k_condvar_broadcast(struct k_condvar *condvar)
3857
{
3958
struct k_thread *pending_thread;
@@ -54,6 +73,14 @@ int z_impl_k_condvar_broadcast(struct k_condvar *condvar)
5473

5574
return woken;
5675
}
76+
#ifdef CONFIG_USERSPACE
77+
int z_vrfy_k_condvar_broadcast(struct k_condvar *condvar)
78+
{
79+
Z_OOPS(Z_SYSCALL_OBJ(condvar, K_OBJ_CONDVAR));
80+
return z_impl_k_condvar_broadcast(condvar);
81+
}
82+
#include <syscalls/k_condvar_broadcast_mrsh.c>
83+
#endif
5784

5885
int z_impl_k_condvar_wait(struct k_condvar *condvar, struct k_mutex *mutex,
5986
k_timeout_t timeout)
@@ -69,3 +96,13 @@ int z_impl_k_condvar_wait(struct k_condvar *condvar, struct k_mutex *mutex,
6996

7097
return ret;
7198
}
99+
#ifdef CONFIG_USERSPACE
100+
int z_vrfy_k_condvar_wait(struct k_condvar *condvar, struct k_mutex *mutex,
101+
k_timeout_t timeout)
102+
{
103+
Z_OOPS(Z_SYSCALL_OBJ(condvar, K_OBJ_CONDVAR));
104+
Z_OOPS(Z_SYSCALL_OBJ(mutex, K_OBJ_MUTEX));
105+
return z_impl_k_condvar_wait(condvar, mutex, timeout);
106+
}
107+
#include <syscalls/k_condvar_wait_mrsh.c>
108+
#endif

scripts/gen_kobject_list.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@
105105
("NET_SOCKET", (None, False, False)),
106106
("net_if", (None, False, False)),
107107
("sys_mutex", (None, True, False)),
108-
("k_futex", (None, True, False))
108+
("k_futex", (None, True, False)),
109+
("k_condvar", (None, False, True))
109110
])
110111

111112
def kobject_to_enum(kobj):

0 commit comments

Comments
 (0)