aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/riscv64/init/start.S3
-rw-r--r--arch/riscv64/kernel/cpu.c11
-rw-r--r--arch/riscv64/kernel/proc.c2
-rw-r--r--common/tcb.c4
-rw-r--r--common/uapi/cap.c19
-rw-r--r--common/uapi/conf.c8
-rw-r--r--common/uapi/dispatch.c10
-rw-r--r--common/uapi/ipc.c14
-rw-r--r--common/uapi/mem.c24
-rw-r--r--common/uapi/proc.c33
-rw-r--r--common/uapi/timers.c30
-rw-r--r--include/apos/uapi.h8
-rw-r--r--include/apos/utils.h2
-rw-r--r--include/arch/cpu.h1
-rw-r--r--include/arch/proc.h2
15 files changed, 94 insertions, 77 deletions
diff --git a/arch/riscv64/init/start.S b/arch/riscv64/init/start.S
index 646a4af..e5b6ced 100644
--- a/arch/riscv64/init/start.S
+++ b/arch/riscv64/init/start.S
@@ -5,7 +5,10 @@
.global _start
/* Entry point to the kernel loader. */
_start:
+/* load static stack */
li sp, PM_STACK_TOP
+/* make sure there's no garbage in tp, important for id assignment */
+li tp, 0
call init
.section .text
diff --git a/arch/riscv64/kernel/cpu.c b/arch/riscv64/kernel/cpu.c
index 4273d02..a730b87 100644
--- a/arch/riscv64/kernel/cpu.c
+++ b/arch/riscv64/kernel/cpu.c
@@ -7,10 +7,21 @@
*/
#include <apos/tcb.h>
+#include <apos/atomic.h>
+
#include <arch/cpu.h>
+static atomic_long cpus = 0;
+
void cpu_assign(struct tcb *t)
{
+ /* bounce cpu id forward, or if first time here, get a cpu id */
+ struct tcb *c = cur_tcb();
+ if (likely(c))
+ t->cpu_id = c->cpu_id;
+ else
+ t->cpu_id = cpus++;
+
__asm__ volatile ("mv tp, %0\n" : : "r" (t) :);
}
diff --git a/arch/riscv64/kernel/proc.c b/arch/riscv64/kernel/proc.c
index 10f8bfa..b047e2c 100644
--- a/arch/riscv64/kernel/proc.c
+++ b/arch/riscv64/kernel/proc.c
@@ -40,7 +40,7 @@ void set_args(struct tcb *t, struct sys_ret a)
struct sys_ret get_args(struct tcb *t)
{
struct riscv_regs *r = (struct riscv_regs *)(--t);
- return (struct sys_ret){r->a0, r->a1, r->a2, r->a3, r->a4, r->a5};
+ return SYS_RET6(r->a0, r->a1, r->a2, r->a3, r->a4, r->a5);
}
void set_thread(struct tcb *t)
diff --git a/common/tcb.c b/common/tcb.c
index 42e634d..675aa1f 100644
--- a/common/tcb.c
+++ b/common/tcb.c
@@ -307,9 +307,7 @@ void use_tcb(struct tcb *t)
{
cpu_assign(t);
- id_t cpu = cpu_id();
- t->cpu_id = cpu;
- cpu_tcb[cpu] = t;
+ cpu_tcb[t->cpu_id] = t;
use_vmem(t->proc.vmem);
}
diff --git a/common/uapi/cap.c b/common/uapi/cap.c
index 84dbc45..3495960 100644
--- a/common/uapi/cap.c
+++ b/common/uapi/cap.c
@@ -38,14 +38,14 @@ SYSCALL_DEFINE3(set_cap)(sys_arg_t tid, sys_arg_t off, sys_arg_t caps)
{
struct tcb *t = cur_tcb();
if (!is_set(t->caps, CAP_CAPS))
- return (struct sys_ret){ERR_PERM, 0, 0, 0, 0, 0};
+ return SYS_RET1(ERR_PERM);
capflags_t *c;
if (!(c = __get_tcb_caps(tid, off)))
- return (struct sys_ret){ERR_INVAL, 0, 0, 0, 0, 0};
+ return SYS_RET1(ERR_INVAL);
set_caps(*c, off, caps);
- return (struct sys_ret){OK, 0, 0, 0, 0, 0};
+ return SYS_RET1(OK);
}
/**
@@ -59,9 +59,9 @@ SYSCALL_DEFINE2(get_cap)(sys_arg_t tid, sys_arg_t off)
{
capflags_t *c;
if (!(c = __get_tcb_caps(tid, off)))
- return (struct sys_ret){ERR_INVAL, 0, 0, 0, 0, 0};
+ return SYS_RET1(ERR_INVAL);
- return (struct sys_ret){OK, get_caps(*c, off), 0, 0, 0, 0};
+ return SYS_RET2(OK, get_caps(*c, off));
}
/**
@@ -70,18 +70,19 @@ SYSCALL_DEFINE2(get_cap)(sys_arg_t tid, sys_arg_t off)
* @param tid Thread ID whose capabilities to clear.
* @param off Offset of capability, multiple of \c bits(cap).
* @param caps Mask of capabilities to clear.
- * @return \ref OK.
+ * @return ERR_LERM if invalid permissions, ERR_INVAL if \p tid doesn't exist,
+ * otherwise OK.
*/
SYSCALL_DEFINE3(clear_cap)(sys_arg_t tid, sys_arg_t off, sys_arg_t caps)
{
struct tcb *t = cur_tcb();
if (!is_set(t->caps, CAP_CAPS))
- return (struct sys_ret){ERR_PERM, 0, 0, 0, 0, 0};
+ return SYS_RET1(ERR_PERM);
capflags_t *c;
if (!(c = __get_tcb_caps(tid, off)))
- return (struct sys_ret){ERR_INVAL, 0, 0, 0, 0, 0};
+ return SYS_RET1(ERR_INVAL);
clear_caps(*c, off, caps);
- return (struct sys_ret){OK, 0, 0, 0, 0, 0};
+ return SYS_RET1(OK);
}
diff --git a/common/uapi/conf.c b/common/uapi/conf.c
index 867d182..7e88358 100644
--- a/common/uapi/conf.c
+++ b/common/uapi/conf.c
@@ -27,7 +27,7 @@ size_t __call_stack_size = SZ_2M;
*/
SYSCALL_DEFINE1(conf_get)(sys_arg_t param)
{
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0 };
+ return SYS_RET1(OK);
}
/**
@@ -45,7 +45,7 @@ SYSCALL_DEFINE2(conf_set)(sys_arg_t param, sys_arg_t val)
UNUSED(val);
/* no parameters supported atm */
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0 };
+ return SYS_RET1(OK);
}
/**
@@ -61,8 +61,8 @@ SYSCALL_DEFINE1(poweroff)(sys_arg_t type)
case SHUTDOWN:
case COLD_REBOOT:
case WARM_REBOOT:
- return (struct sys_ret){ OK, poweroff(type), 0, 0, 0, 0 };
+ return SYS_RET2(OK, poweroff(type));
};
- return (struct sys_ret){ ERR_INVAL, 0, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_INVAL);
}
diff --git a/common/uapi/dispatch.c b/common/uapi/dispatch.c
index db15b62..91fba83 100644
--- a/common/uapi/dispatch.c
+++ b/common/uapi/dispatch.c
@@ -64,7 +64,7 @@ static const sys_t syscall_table[] = {
*/
SYSCALL_DEFINE0(noop)(){
info("sys_noop\n");
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0 };
+ return SYS_RET1(OK);
}
/**
@@ -77,7 +77,7 @@ SYSCALL_DEFINE1(putch)(sys_arg_t a){
const char c[2] = {a, 0};
MAYBE_UNUSED(c);
dbg((const char *)&c);
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0 };
+ return SYS_RET1(OK);
}
struct sys_ret syscall_dispatch(sys_arg_t syscall, sys_arg_t a, sys_arg_t b,
@@ -89,13 +89,13 @@ struct sys_ret syscall_dispatch(sys_arg_t syscall, sys_arg_t a, sys_arg_t b,
if (sc >= ARRAY_SIZE(syscall_table)) {
error("Syscall %zu outside allowed range [0 - %zu]\n", sc,
ARRAY_SIZE(syscall_table));
- return (struct sys_ret){ ERR_INVAL, 0, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_INVAL);
}
sys_t call = syscall_table[sc];
if (!call) {
error("Syscall %zu not legitimate value\n", sc);
- return (struct sys_ret){ ERR_INVAL, 0, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_INVAL);
}
struct sys_ret r = call(a, b, c, d, e);
@@ -104,7 +104,7 @@ struct sys_ret syscall_dispatch(sys_arg_t syscall, sys_arg_t a, sys_arg_t b,
bug("Syscall %zu overwrote stack canary\n", syscall);
/** @todo should probably halt, as the system is likely in an
* unstable state. */
- return (struct sys_ret){ ERR_INT, 0, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_INT);
}
return r;
diff --git a/common/uapi/ipc.c b/common/uapi/ipc.c
index 826fd57..dba33b0 100644
--- a/common/uapi/ipc.c
+++ b/common/uapi/ipc.c
@@ -18,7 +18,7 @@
SYSCALL_DEFINE1(ipc_server)(sys_arg_t callback)
{
cur_tcb()->callback = callback;
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0 };
+ return SYS_RET1(OK);
}
/**
@@ -29,7 +29,7 @@ SYSCALL_DEFINE1(ipc_server)(sys_arg_t callback)
* @param d1 IPC argument 1.
* @param d2 IPC argument 2.
* @param d3 IPC argument 3.
- * @return \c d0 and \c d1.
+ * @return When succesful: OK, thread id of the caller and the arguments as-is.
*/
SYSCALL_DEFINE5(ipc_req)(sys_arg_t pid,
sys_arg_t d0, sys_arg_t d1, sys_arg_t d2, sys_arg_t d3)
@@ -38,7 +38,7 @@ SYSCALL_DEFINE5(ipc_req)(sys_arg_t pid,
struct tcb *r = get_tcb(pid);
/** \todo something like jump_to_callback(t) */
/* remember difference between ipc_req and ipc_fwd! */
- return (struct sys_ret){ OK, t->tid, d0, d1, d2, d3 };
+ return SYS_RET6(OK, t->tid, d0, d1, d2, d3);
}
/**
@@ -49,7 +49,7 @@ SYSCALL_DEFINE5(ipc_req)(sys_arg_t pid,
* @param d1 IPC argument 1.
* @param d2 IPC argument 2.
* @param d3 IPC argument 3.
- * @return \p d0 and \p d1.
+ * @return
*/
SYSCALL_DEFINE5(ipc_fwd)(sys_arg_t pid,
sys_arg_t d0, sys_arg_t d1, sys_arg_t d2, sys_arg_t d3)
@@ -57,7 +57,7 @@ SYSCALL_DEFINE5(ipc_fwd)(sys_arg_t pid,
struct tcb *t = cur_tcb();
struct tcb *r = get_tcb(pid);
/* ditto */
- return (struct sys_ret){ OK, t->tid, d0, d1, d2, d3 };
+ return SYS_RET6(OK, t->tid, d0, d1, d2, d3);
}
/**
@@ -74,7 +74,7 @@ SYSCALL_DEFINE4(ipc_resp)(sys_arg_t d0, sys_arg_t d1, sys_arg_t d2,
{
struct tcb *t = cur_tcb();
/* something like return_from_callback(t, r) */
- return (struct sys_ret){ OK, t->tid, d0, d1, d2, d3 };
+ return SYS_RET6(OK, t->tid, d0, d1, d2, d3);
}
/**
@@ -114,5 +114,5 @@ SYSCALL_DEFINE2(ipc_notify)(sys_arg_t tid, sys_arg_t swap){
* otherwise wait for return from rpc. If not running,
* just queue the interrupt.
*/
- return (struct sys_ret){ OK, 0, 0 /* type */, 0, 0, 0 };
+ return SYS_RET1(OK);
}
diff --git a/common/uapi/mem.c b/common/uapi/mem.c
index 8da0f15..599c971 100644
--- a/common/uapi/mem.c
+++ b/common/uapi/mem.c
@@ -26,9 +26,9 @@ SYSCALL_DEFINE2(req_mem)(sys_arg_t size, sys_arg_t flags)
struct tcb *r = cur_proc();
vm_t start = 0;
if ((start = alloc_uvmem(r, size, flags)))
- return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_OOMEM);
- return (struct sys_ret){ OK, start, 0, 0, 0, 0 };
+ return SYS_RET2(OK, start);
}
/**
@@ -45,9 +45,9 @@ SYSCALL_DEFINE3(req_fixmem)(sys_arg_t fixed, sys_arg_t size, sys_arg_t flags)
struct tcb *r = cur_proc();
vm_t start = 0;
if ((start = alloc_fixed_uvmem(r, fixed, size, flags)))
- return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_OOMEM);
- return (struct sys_ret){ OK, start, 0, 0, 0, 0 };
+ return SYS_RET2(OK, start);
}
/**
@@ -68,9 +68,9 @@ SYSCALL_DEFINE1(free_mem)(sys_arg_t start)
status = free_devmem(r, vm_start);
if (status)
- return (struct sys_ret){ ERR_NF, 0, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_NF);
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0 };
+ return SYS_RET1(OK);
}
/**
@@ -92,9 +92,9 @@ SYSCALL_DEFINE3(req_pmem)(sys_arg_t paddr, sys_arg_t size, sys_arg_t flags)
struct tcb *r = cur_proc();
vm_t start = 0;
if ((start = alloc_devmem(r, paddr, size, flags)))
- return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_OOMEM);
- return (struct sys_ret){ OK, start, 0, 0, 0, 0 };
+ return SYS_RET2(OK, start);
}
/**
@@ -111,9 +111,9 @@ SYSCALL_DEFINE2(req_sharedmem)(sys_arg_t size, sys_arg_t flags)
struct tcb *t = cur_proc();
vm_t start = 0;
if ((start = alloc_shared_uvmem(t, size, flags)))
- return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_OOMEM);
- return (struct sys_ret){ OK, start, 0, 0, 0, 0 };
+ return SYS_RET2(OK, start);
}
/**
@@ -131,9 +131,9 @@ SYSCALL_DEFINE3(ref_sharedmem)(sys_arg_t tid, sys_arg_t va, sys_arg_t flags)
struct tcb *t2 = get_tcb(tid);
vm_t start = 0;
if ((start = ref_shared_uvmem(t1, t2, va, flags)))
- return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_OOMEM);
- return (struct sys_ret){ OK, start, 0, 0, 0, 0 };
+ return SYS_RET2(OK, start);
}
/** \todo add some way to specify who gets to access the shared memory? */
diff --git a/common/uapi/proc.c b/common/uapi/proc.c
index a9a3dce..a60aa52 100644
--- a/common/uapi/proc.c
+++ b/common/uapi/proc.c
@@ -25,7 +25,7 @@
* @return \ref OK and 0.
*/
SYSCALL_DEFINE2(create)(sys_arg_t func, sys_arg_t arg){
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0 };
+ return SYS_RET1(OK);
}
/**
@@ -44,7 +44,7 @@ SYSCALL_DEFINE2(create)(sys_arg_t func, sys_arg_t arg){
* @return \ref OK and 0.
*/
SYSCALL_DEFINE0(fork)(){
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0 };
+ return SYS_RET1(OK);
}
/**
@@ -52,7 +52,7 @@ SYSCALL_DEFINE0(fork)(){
*
* @param bin Binary to execute.
* @param interp Optional interpreter binary.
- * @return \see prepare_proc() and 0.
+ * @return \see prepare_proc().
*/
SYSCALL_DEFINE2(exec)(sys_arg_t bin, sys_arg_t interp){
/** \todo execute new process, probably with more sensible argc passing */
@@ -61,7 +61,8 @@ SYSCALL_DEFINE2(exec)(sys_arg_t bin, sys_arg_t interp){
/* mark binary to be kept */
struct mem_region *b = find_used_region(&r->sp_r, bin);
if (!b)
- return (struct sys_ret){ERR_INVAL, 0, 0, 0, 0, 0};
+ return SYS_RET1(ERR_INVAL);
+
set_bit(b->flags, MR_KEEP);
struct mem_region *i = 0;
@@ -69,7 +70,8 @@ SYSCALL_DEFINE2(exec)(sys_arg_t bin, sys_arg_t interp){
/* mark interpreter to be kept */
i = find_used_region(&r->sp_r, interp);
if (!i)
- return (struct sys_ret){ERR_INVAL, 1, 0, 0, 0, 0};
+ return SYS_RET1(ERR_INVAL);
+
set_bit(i->flags, MR_KEEP);
}
@@ -81,7 +83,7 @@ SYSCALL_DEFINE2(exec)(sys_arg_t bin, sys_arg_t interp){
if (interp)
clear_bit(b->flags, MR_KEEP);
- return (struct sys_ret){ prepare_proc(r, bin, interp), 0, 0, 0, 0, 0 };
+ return SYS_RET1(prepare_proc(r, bin, interp));
}
/**
@@ -89,15 +91,15 @@ SYSCALL_DEFINE2(exec)(sys_arg_t bin, sys_arg_t interp){
*
* @param bin Binary to execute.
* @param interp Optional interpreter binary.
- * @return \see prepare_proc() and 0.
+ * @return \see prepare_proc() and process id of the new process.
*/
SYSCALL_DEFINE2(spawn)(sys_arg_t bin, sys_arg_t interp)
{
struct tcb *t = create_proc(NULL);
if (!t)
- return (struct sys_ret){ERR_OOMEM, 0, 0, 0, 0, 0};
+ return SYS_RET1(ERR_OOMEM);
- return (struct sys_ret){prepare_proc(t, bin, interp), t->pid, 0, 0, 0, 0};
+ return SYS_RET2(prepare_proc(t, bin, interp), t->pid);
}
/**
@@ -106,11 +108,11 @@ SYSCALL_DEFINE2(spawn)(sys_arg_t bin, sys_arg_t interp)
* @param tid Thread to kill.
* \todo Implement.
*
- * @return No?
+ * @return ERR_PERM if not capable to kill, otherwise OK.
*/
SYSCALL_DEFINE1(kill)(sys_arg_t tid)
{
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0};
+ return SYS_RET1(OK);
}
/**
@@ -121,17 +123,16 @@ SYSCALL_DEFINE1(kill)(sys_arg_t tid)
* for message passing?
*
* @param tid Thread ID to swap to.
- * @return \ref OK and 0.
+ * @return \ref OK.
*/
SYSCALL_DEFINE1(swap)(sys_arg_t tid){
struct tcb *t = get_tcb(tid);
if (!t)
- /** @todo add error sys_ret macro? */
- return (struct sys_ret){ERR_INVAL, 0, 0, 0, 0, 0};
+ return SYS_RET1(ERR_INVAL);
/* switch over to new thread */
use_tcb(t);
-
+
return get_args(t);
}
@@ -145,5 +146,5 @@ SYSCALL_DEFINE1(swap)(sys_arg_t tid){
*/
SYSCALL_DEFINE2(assign)(sys_arg_t tid, sys_arg_t cpu)
{
- return (struct sys_ret){OK, 0, 0, 0, 0, 0};
+ return SYS_RET1(OK);
}
diff --git a/common/uapi/timers.c b/common/uapi/timers.c
index 5c2f58f..80cef1d 100644
--- a/common/uapi/timers.c
+++ b/common/uapi/timers.c
@@ -42,9 +42,9 @@ SYSCALL_DEFINE0(timebase)()
{
ticks_t t = secs_to_ticks(1);
#if defined(_LP64)
- return (struct sys_ret){ OK, t, 0, 0, 0, 0 };
+ return SYS_RET2(OK, t);
#else
- return (struct sys_ret){ OK, t >> 32, t};
+ return SYS_RET3(OK, t >> 32, t);
#endif
}
@@ -62,9 +62,9 @@ SYSCALL_DEFINE0(ticks)()
{
ticks_t t = current_ticks();
#if defined(_LP64)
- return (struct sys_ret){ OK, t, 0, 0, 0, 0};
+ return SYS_RET2(OK, t);
#else
- return (struct sys_ret){ OK, t >> 32, t, 0, 0, 0 };
+ return SYS_RET3(OK, t >> 32, t);
#endif
}
@@ -81,12 +81,9 @@ SYSCALL_DEFINE0(ticks)()
*/
SYSCALL_DEFINE2(req_rel_timer)(sys_arg_t ticks, sys_arg_t mult)
{
- return (struct sys_ret){
- OK,
- new_rel_timer(cur_tcb()->tid,
- scaled_ticks(ticks, mult)),
- 0, 0, 0, 0
- };
+ return SYS_RET2(OK,
+ new_rel_timer(cur_tcb()->tid,
+ scaled_ticks(ticks, mult)));
}
/**
@@ -99,12 +96,9 @@ SYSCALL_DEFINE2(req_rel_timer)(sys_arg_t ticks, sys_arg_t mult)
*/
SYSCALL_DEFINE2(req_abs_timer)(sys_arg_t ticks, sys_arg_t mult)
{
- return (struct sys_ret){
- OK,
- new_abs_timer(cur_tcb()->tid,
- scaled_ticks(ticks, mult)),
- 0, 0, 0, 0
- };
+ return SYS_RET2(OK,
+ new_abs_timer(cur_tcb()->tid,
+ scaled_ticks(ticks, mult)));
}
/**
@@ -118,8 +112,8 @@ SYSCALL_DEFINE1(free_timer)(sys_arg_t cid)
{
struct timer *timer = find_timer(cid);
if (!timer)
- return (struct sys_ret){ ERR_NF, 0, 0, 0, 0, 0 };
+ return SYS_RET1(ERR_NF);
remove_timer(timer);
- return (struct sys_ret){ OK, 0, 0, 0, 0, 0 };
+ return SYS_RET1(OK);
}
diff --git a/include/apos/uapi.h b/include/apos/uapi.h
index 02e8816..7da24c6 100644
--- a/include/apos/uapi.h
+++ b/include/apos/uapi.h
@@ -51,6 +51,14 @@ struct sys_ret {
sys_arg_t ar4;
};
+#define SYS_RET0() (struct sys_ret){0, 0, 0, 0, 0, 0}
+#define SYS_RET1(a) (struct sys_ret){a, 0, 0, 0, 0, 0}
+#define SYS_RET2(a, b) (struct sys_ret){a, b, 0, 0, 0, 0}
+#define SYS_RET3(a, b, c) (struct sys_ret){a, b, c, 0, 0, 0}
+#define SYS_RET4(a, b, c, d) (struct sys_ret){a, b, c, d, 0, 0}
+#define SYS_RET5(a, b, c, d, e) (struct sys_ret){a, b, c, d, e, 0}
+#define SYS_RET6(a, b, c, d, e, f) (struct sys_ret){a, b, c, d, e, f}
+
/**
* Helper macro for declaring syscalls with zero arguments.
*
diff --git a/include/apos/utils.h b/include/apos/utils.h
index 6eeb54f..378f3a0 100644
--- a/include/apos/utils.h
+++ b/include/apos/utils.h
@@ -190,7 +190,7 @@
* Signal to the compiler that some region is unreachable.
* Mainly used for debugging with instrumentation, though it could provide some
* micro-optimisations.
-*/
+ */
#if __has_builtin(__builtin_unreachable)
#define unreachable() __builtin_unreachable()
#else
diff --git a/include/arch/cpu.h b/include/arch/cpu.h
index 3156076..ddea2ac 100644
--- a/include/arch/cpu.h
+++ b/include/arch/cpu.h
@@ -30,6 +30,7 @@ id_t cpu_id();
/**
* Assign tcb to current cpu.
+ * Essentially sets t->cpu_id to the cpu id, plus whatever the arch needs.
*
* @param t \ref tcb to assign to current cpu.
*/
diff --git a/include/arch/proc.h b/include/arch/proc.h
index 5ea0f0f..5047eab 100644
--- a/include/arch/proc.h
+++ b/include/arch/proc.h
@@ -25,7 +25,7 @@
*/
void set_args(struct tcb *t, struct sys_ret a);
-/**
+/**
* Get argument data attached to thread.
* To some extent a hack, used by swap.
*