diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-09-15 19:21:14 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-09-15 19:46:07 +0300 |
| commit | a717296a2036cede5fccfff544513043a984d614 (patch) | |
| tree | 68f75a23adc298628fb9cab41fd47402a99dd19d /common/uapi/mem.c | |
| parent | 619725a5f2f5272f9cbb547ed95c87312c2765a9 (diff) | |
| download | kmi-a717296a2036cede5fccfff544513043a984d614.tar.gz kmi-a717296a2036cede5fccfff544513043a984d614.zip | |
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.
Diffstat (limited to 'common/uapi/mem.c')
| -rw-r--r-- | common/uapi/mem.c | 24 |
1 files changed, 12 insertions, 12 deletions
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? */ |
