diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-10-30 00:57:33 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-10-30 00:57:33 +0200 |
| commit | 44a73ecab6e91519627786a5101cd4f1a2f2b0d7 (patch) | |
| tree | f5c811050a4d5ee832f5883c4d0c27efddd60817 /arch/riscv64/kernel/vmem.c | |
| parent | 5976ad390a15726c3ddfacf8c8b282c8350f9554 (diff) | |
| download | kmi-44a73ecab6e91519627786a5101cd4f1a2f2b0d7.tar.gz kmi-44a73ecab6e91519627786a5101cd4f1a2f2b0d7.zip | |
most of the way to passing tests
Diffstat (limited to 'arch/riscv64/kernel/vmem.c')
| -rw-r--r-- | arch/riscv64/kernel/vmem.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/riscv64/kernel/vmem.c b/arch/riscv64/kernel/vmem.c index cf1391e..5a44f53 100644 --- a/arch/riscv64/kernel/vmem.c +++ b/arch/riscv64/kernel/vmem.c @@ -563,6 +563,23 @@ size_t max_rpc_size() return SZ_512K; } +void copy_rpc_stack(struct tcb *t, struct tcb *c) +{ + /* this is of terrible, copying 2MiB for every fork, not + * great. TODO: use the direct pointer to the rpc stack element? */ + for (size_t i = 0; i < rpc_pages; ++i) { + pm_t p1, p2; + stat_t ok1 = stat_vpage(t->rpc.vmem, RPC_STACK_BASE + BASE_PAGE_SIZE * i, + &p1, NULL, NULL); + + stat_t ok2 = stat_vpage(c->rpc.vmem, RPC_STACK_BASE + BASE_PAGE_SIZE * i, + &p2, NULL, NULL); + + assert(ok1 == OK && ok2 == OK); + memcpy((void *)p2, (void *)p1, BASE_PAGE_SIZE); + } +} + stat_t setup_rpc_stack(struct tcb *t) { /* by default rpc stack is marked inaccessible to generate segfaults on |
