aboutsummaryrefslogtreecommitdiff
path: root/src/vmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vmem.c')
-rw-r--r--src/vmem.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/vmem.c b/src/vmem.c
index 0404202..8c23d4f 100644
--- a/src/vmem.c
+++ b/src/vmem.c
@@ -427,9 +427,17 @@ vmflags_t sanitize_uvflags(vmflags_t flags)
void handle_pagefault(vm_t addr)
{
+ info("page fault at %lx\n", addr);
struct tcb *t = cur_tcb();
- struct tcb *p = get_cproc(t);
+ if (in_rpc_stack(t, addr)) {
+ vm_t aligned = align_down(addr, BASE_PAGE_SIZE);
+ grow_rpc(t, aligned);
+ flush_tlb_all();
+ return;
+ }
+
+ struct tcb *p = get_cproc(t);
size_t ref = __page(addr);
struct mem_region *m = find_closest_used_region(&p->uvmem.region, addr);