diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-05-21 21:23:12 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-05-21 21:23:12 +0300 |
| commit | a4851206bef5ceecef18b3fde5be6918a67cca21 (patch) | |
| tree | 6d9a817a8e59687ef4e45388d310b9beda2ba335 /common/vmem.c | |
| parent | 8da0171e5ca3492cdb34422184a1c96acd0b5165 (diff) | |
| download | kmi-a4851206bef5ceecef18b3fde5be6918a67cca21.tar.gz kmi-a4851206bef5ceecef18b3fde5be6918a67cca21.zip | |
add create syscall for threads
Diffstat (limited to 'common/vmem.c')
| -rw-r--r-- | common/vmem.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/common/vmem.c b/common/vmem.c index 817f851..ff27ed8 100644 --- a/common/vmem.c +++ b/common/vmem.c @@ -106,8 +106,9 @@ stat_t alloc_uvmem_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, if (!*offset) return INFO_TRGN; /* try again */ - stat_t ret = map_vpage(b, *offset, vaddr, flags, order); - return ret; + stat_t *status = (stat_t *)data, ret; + ret = *status = map_vpage(b, *offset, vaddr, flags, order); + return (ret == INFO_SEFF) ? OK : ret; } stat_t alloc_shared_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, @@ -117,8 +118,10 @@ stat_t alloc_shared_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, return INFO_TRGN; *offset = alloc_page(MM_O0, *offset); - map_vpage(b, *offset, vaddr, flags, order); - return OK; + + stat_t *status = (stat_t *)data, ret; + ret = *status = map_vpage(b, *offset, vaddr, flags, order); + return (ret == INFO_SEFF) ? OK : ret; } stat_t free_uvmem_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, @@ -133,11 +136,11 @@ stat_t free_uvmem_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, if (order != v_order) return INFO_TRGN; - stat_t *status = (stat_t *)data; - *status = unmap_vpage(b, vaddr); + stat_t *status = (stat_t *)data, ret; + ret = *status = unmap_vpage(b, vaddr); /* don't free shared pages, unless they're owned */ if (!__is_set(flags, MR_SHARED) || __is_set(flags, MR_OWNED)) free_page(order, paddr); - return OK; + return (ret == INFO_SEFF) ? OK : ret; } |
