diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-01-26 15:53:16 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2023-01-26 15:53:16 +0200 |
| commit | 8a5e4cf53d981e793fca90d9b51bd395265cf4db (patch) | |
| tree | 245aabe14f45aa717f4f3156bdcfc1afb0388131 /common/uapi | |
| parent | 5dad7c7ecccaa1e11be23f53e3198af6933c9f60 (diff) | |
| download | kmi-8a5e4cf53d981e793fca90d9b51bd395265cf4db.tar.gz kmi-8a5e4cf53d981e793fca90d9b51bd395265cf4db.zip | |
add req_page syscall
Diffstat (limited to 'common/uapi')
| -rw-r--r-- | common/uapi/dispatch.c | 1 | ||||
| -rw-r--r-- | common/uapi/mem.c | 19 |
2 files changed, 20 insertions, 0 deletions
diff --git a/common/uapi/dispatch.c b/common/uapi/dispatch.c index d11e02e..b5cd51e 100644 --- a/common/uapi/dispatch.c +++ b/common/uapi/dispatch.c @@ -51,6 +51,7 @@ void handle_syscall(sys_arg_t syscall, sys_arg_t a, sys_arg_t b, case SYS_NOOP: sys_noop(t, a, b, c, d, e); break; case SYS_PUTCH: sys_putch(t, a, b, c, d, e); break; case SYS_REQ_MEM: sys_req_mem(t, a, b, c, d, e); break; + case SYS_REQ_PAGE: sys_req_page(t, a, b, c, d, e); break; case SYS_REQ_PMEM: sys_req_pmem(t, a, b, c, d, e); break; case SYS_REQ_FIXMEM: sys_req_fixmem(t, a, b, c, d, e); break; case SYS_REQ_SHAREDMEM: sys_req_sharedmem(t, a, b, c, d, e); break; diff --git a/common/uapi/mem.c b/common/uapi/mem.c index 099028e..41ebcca 100644 --- a/common/uapi/mem.c +++ b/common/uapi/mem.c @@ -33,6 +33,25 @@ SYSCALL_DEFINE2(req_mem)(struct tcb *t, sys_arg_t size, sys_arg_t flags) } /** + * Allocate single page to program. + * + * @param t Current tcb. + * @param size Size of the allocation. + * @param flags Flags of allocation. + * @return \ref ERR_OOMEM if unsucessful, otherwise \ref OK, virtual address, + * actual size, physical address, in that order. + */ +SYSCALL_DEFINE2(req_page)(struct tcb *t, sys_arg_t size, sys_arg_t flags) +{ + struct tcb *r = get_cproc(t); + vm_t start = 0; pm_t paddr = 0; size_t asize = size; + if (!(start = alloc_uvpage(r, asize, flags, &asize, &paddr))) + return_args(t, SYS_RET1(ERR_OOMEM)); + + return_args(t, SYS_RET4(OK, start, asize, paddr)); +} + +/** * Fixed memory request syscall handler. * * @param t Current tcb. |
