aboutsummaryrefslogtreecommitdiff
path: root/common/uapi/mem.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2022-09-15 19:21:14 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2022-09-15 19:46:07 +0300
commita717296a2036cede5fccfff544513043a984d614 (patch)
tree68f75a23adc298628fb9cab41fd47402a99dd19d /common/uapi/mem.c
parent619725a5f2f5272f9cbb547ed95c87312c2765a9 (diff)
downloadkmi-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.c24
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? */