From a717296a2036cede5fccfff544513043a984d614 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Thu, 15 Sep 2022 19:21:14 +0300 Subject: change syscalls to take 5 params and return 6 + In total, a syscall is built up of 6 values, with the first being the syscall number. Symmetrically, the first value is now a status and the following five values return "values". This allows us to cram in more info into the ipc_* functions. The performance difference is absolutely minimal, at least from my testing in qemu. --- common/uapi/mem.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'common/uapi/mem.c') diff --git a/common/uapi/mem.c b/common/uapi/mem.c index eca3da2..8da0f15 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 }; + return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 }; - return (struct sys_ret){ OK, start }; + return (struct sys_ret){ OK, start, 0, 0, 0, 0 }; } /** @@ -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 }; + return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 }; - return (struct sys_ret){ OK, start }; + return (struct sys_ret){ OK, start, 0, 0, 0, 0 }; } /** @@ -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 }; + return (struct sys_ret){ ERR_NF, 0, 0, 0, 0, 0 }; - return (struct sys_ret){ OK, 0 }; + return (struct sys_ret){ OK, 0, 0, 0, 0, 0 }; } /** @@ -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 }; + return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 }; - return (struct sys_ret){ OK, start }; + return (struct sys_ret){ OK, start, 0, 0, 0, 0 }; } /** @@ -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 }; + return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 }; - return (struct sys_ret){ OK, start }; + return (struct sys_ret){ OK, start, 0, 0, 0, 0 }; } /** @@ -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 }; + return (struct sys_ret){ ERR_OOMEM, NULL, 0, 0, 0, 0 }; - return (struct sys_ret){ OK, start }; + return (struct sys_ret){ OK, start, 0, 0, 0, 0 }; } /** \todo add some way to specify who gets to access the shared memory? */ -- cgit v1.3