diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-11-21 17:38:57 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-11-21 17:38:57 +0200 |
| commit | e1599d8ab33f3f7d09c6a8a05f954209c969c8c1 (patch) | |
| tree | 6a7a74578dae2e7e0063474ac6aca674db9d8ea3 /common/uapi/ipc.c | |
| parent | 6f5065da917a911c5e810a058d16d147c31d5fbe (diff) | |
| download | kmi-e1599d8ab33f3f7d09c6a8a05f954209c969c8c1.tar.gz kmi-e1599d8ab33f3f7d09c6a8a05f954209c969c8c1.zip | |
make syscall handlers void
Diffstat (limited to 'common/uapi/ipc.c')
| -rw-r--r-- | common/uapi/ipc.c | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/common/uapi/ipc.c b/common/uapi/ipc.c index 860ec54..93717e4 100644 --- a/common/uapi/ipc.c +++ b/common/uapi/ipc.c @@ -13,45 +13,51 @@ /** * IPC server notification syscall handler. * + * @param t Current tcb. * @param callback Address of server callback. * @return \ref OK and \c 0. */ SYSCALL_DEFINE1(ipc_server)(struct tcb *t, sys_arg_t callback) { get_cproc(t)->callback = callback; - return SYS_RET1(OK); + return_args(t, SYS_RET1(OK)); } /** * Actual IPC syscall handler. * + * @param t Current tcb. * @param pid Process to request RPC to. * @param d0 IPC argument 0. * @param d1 IPC argument 1. * @param d2 IPC argument 2. * @param d3 IPC argument 3. * @param fwd Whether to forward. - * @return + * + * Returns \ref ERR_OOMEM if there isn't enough IPC stack left, \ref ERR_INVAL + * if the the target process doesn't exist, \ref ERR_NOINIT if the target + * process hasn't defined a callback. Otherwise \ref OK and whatever the target + * process sends back. */ -static struct sys_ret do_ipc(struct tcb *t, - sys_arg_t pid, - sys_arg_t d0, - sys_arg_t d1, - sys_arg_t d2, - sys_arg_t d3, - bool fwd) +static void do_ipc(struct tcb *t, + sys_arg_t pid, + sys_arg_t d0, + sys_arg_t d1, + sys_arg_t d2, + sys_arg_t d3, + bool fwd) { if (!enough_rpc_stack(t)) - return SYS_RET1(ERR_OOMEM); + return_args(t, SYS_RET1(ERR_OOMEM)); struct tcb *r = get_tcb(pid); if (!r) - return SYS_RET1(ERR_INVAL); + return_args(t, SYS_RET1(ERR_INVAL)); r = get_rproc(r); if (!r->callback) - return SYS_RET1(ERR_NOINIT); + return_args(t, SYS_RET1(ERR_NOINIT)); clone_uvmem(r->proc.vmem, t->rpc.vmem); use_vmem(t->rpc.vmem); @@ -65,11 +71,12 @@ static struct sys_ret do_ipc(struct tcb *t, t->pid = r->rid; - return SYS_RET6(OK, t->eid, d0, d1, d2, d3); + return_args(t, SYS_RET6(OK, t->eid, d0, d1, d2, d3)); } /** * IPC request syscall handler. * + * @param t Current tcb. * @param pid Process to request RPC to. * @param d0 IPC argument 0. * @param d1 IPC argument 1. @@ -80,12 +87,13 @@ static struct sys_ret do_ipc(struct tcb *t, SYSCALL_DEFINE5(ipc_req)(struct tcb *t, sys_arg_t pid, sys_arg_t d0, sys_arg_t d1, sys_arg_t d2, sys_arg_t d3) { - return do_ipc(t, pid, d0, d1, d2, d3, false); + do_ipc(t, pid, d0, d1, d2, d3, false); } /** * IPC forwarding syscall handler. * + * @param t Current tcb. * @param pid Process to request RPC to. * @param d0 IPC argument 0. * @param d1 IPC argument 1. @@ -96,12 +104,13 @@ SYSCALL_DEFINE5(ipc_req)(struct tcb *t, sys_arg_t pid, SYSCALL_DEFINE5(ipc_fwd)(struct tcb *t, sys_arg_t pid, sys_arg_t d0, sys_arg_t d1, sys_arg_t d2, sys_arg_t d3) { - return do_ipc(t, pid, d0, d1, d2, d3, true); + do_ipc(t, pid, d0, d1, d2, d3, true); } /** * IPC response syscall handler. * + * @param t Current tcb. * @param d0 IPC return value 0. * @param d1 IPC return value 1. * @param d2 IPC return value 2. @@ -121,7 +130,7 @@ SYSCALL_DEFINE4(ipc_resp)(struct tcb *t, sys_arg_t d0, sys_arg_t d1, else use_vmem(t->proc.vmem); - return SYS_RET6(OK, t->tid, d0, d1, d2, d3); + return_args(t, SYS_RET6(OK, t->tid, d0, d1, d2, d3)); } /** @@ -129,25 +138,26 @@ SYSCALL_DEFINE4(ipc_resp)(struct tcb *t, sys_arg_t d0, sys_arg_t d1, * * \todo Implement. * + * @param t Current tcb. * @param tid Thread ID to notify. * @return \ref OK and 0. */ SYSCALL_DEFINE1(ipc_notify)(struct tcb *t, sys_arg_t tid){ if (!has_cap(t->caps, CAP_CALL)) - return SYS_RET1(ERR_PERM); + return_args(t, SYS_RET1(ERR_PERM)); struct tcb *r = get_tcb(tid); if (r->notify_state == NOTIFY_QUEUED) - return SYS_RET1(OK); + return_args(t, SYS_RET1(OK)); if (r->notify_state == NOTIFY_RUNNING) { t->notify_state = NOTIFY_QUEUED; - return SYS_RET1(OK); + return_args(t, SYS_RET1(OK)); } r->notify_state = NOTIFY_QUEUED; if (running(r)) send_ipi(r); - return SYS_RET1(OK); + return_args(t, SYS_RET1(OK)); } |
