aboutsummaryrefslogtreecommitdiff
path: root/src/vmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vmem.c')
-rw-r--r--src/vmem.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/vmem.c b/src/vmem.c
index 5681a85..2752d23 100644
--- a/src/vmem.c
+++ b/src/vmem.c
@@ -166,8 +166,8 @@ static vm_t __clone_shared_region(struct tcb *d, struct tcb *s,
size_t size = end - start;
vm_t v = alloc_shared_region(&d->uvmem.region, size, &size,
MR_NONBACKED | m->flags, s->rid);
- if (ERR_CODE(v))
- return v;
+ if (!v)
+ return 0;
stat_t res = clone_region(d->uvmem.vmem, s->uvmem.vmem,
start, v, size, flags);
@@ -329,10 +329,10 @@ vm_t map_shared_fixed_uvmem(struct tcb *t, pm_t start, size_t size,
{
assert(is_aligned(start, BASE_PAGE_SIZE));
- const vm_t v = alloc_shared_region(&t->uvmem.region, size, &size, flags,
- 0);
- if (ERR_CODE(v))
- return v;
+ const vm_t v = alloc_shared_region(&t->uvmem.region,
+ size, &size, flags, 0);
+ if (!v)
+ return 0;
stat_t ret = OK;
if ((ret = map_fixed_region(t->proc.vmem, v, start, size, flags))) {
@@ -438,10 +438,8 @@ void handle_pagefault(vm_t addr)
}
struct tcb *p = get_cproc(t);
- size_t ref = __page(addr);
-
- struct mem_region *m = find_closest_used_region(&p->uvmem.region, addr);
- if (!m || (ref < m->start || ref > m->end) || !is_region_used(m)) {
+ struct mem_region *m = find_addr_region(&p->uvmem.region, addr);
+ if (!m) {
error("cannot handle actual page fault just yet :(\n");
kernel_panic(NULL, NULL, 0);
return;