summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/amd64/amd64/pmap.c10
-rw-r--r--sys/include/vm/pmap.h2
-rw-r--r--sys/kern/kern_sched.c2
3 files changed, 7 insertions, 7 deletions
diff --git a/sys/arch/amd64/amd64/pmap.c b/sys/arch/amd64/amd64/pmap.c
index 6eca948..9071722 100644
--- a/sys/arch/amd64/amd64/pmap.c
+++ b/sys/arch/amd64/amd64/pmap.c
@@ -235,8 +235,8 @@ pmap_unmap(struct vm_ctx *ctx, struct vas vas, vaddr_t va)
return pmap_modify_tbl(ctx, vas, va, 0);
}
-struct vas
-pmap_create_vas(struct vm_ctx *ctx)
+int
+pmap_create_vas(struct vm_ctx *ctx, struct vas *res)
{
struct vas current_vas = pmap_read_vas();
struct vas new_vas = {0};
@@ -250,8 +250,7 @@ pmap_create_vas(struct vm_ctx *ctx)
new_vas.top_level = vm_alloc_pageframe(1);
if (new_vas.top_level == 0) {
- /* Top level may remain zero to denote failure */
- return new_vas;
+ return -1;
}
src = PHYS_TO_VIRT(current_vas.top_level);
@@ -269,7 +268,8 @@ pmap_create_vas(struct vm_ctx *ctx)
dest[i] = src[i];
}
- return new_vas;
+ *res = new_vas;
+ return 0;
}
void
diff --git a/sys/include/vm/pmap.h b/sys/include/vm/pmap.h
index faad0fb..8c69372 100644
--- a/sys/include/vm/pmap.h
+++ b/sys/include/vm/pmap.h
@@ -70,7 +70,7 @@ struct vm_ctx {
* Create a virtual address space
* and return the descriptor.
*/
-struct vas pmap_create_vas(struct vm_ctx *);
+int pmap_create_vas(struct vm_ctx *, struct vas *);
/*
* Switch the current virtual address space
diff --git a/sys/kern/kern_sched.c b/sys/kern/kern_sched.c
index 1100f4a..ddc99ca 100644
--- a/sys/kern/kern_sched.c
+++ b/sys/kern/kern_sched.c
@@ -328,7 +328,7 @@ sched_load_init(void)
if ((init_bin = initramfs_open("/usr/sbin/init")) == NULL)
panic("Could not open /usr/sbin/init\n");
- args.vas = pmap_create_vas(vm_get_ctx());
+ pmap_create_vas(vm_get_ctx(), &args.vas);
args.argp = argv;
args.envp = envp;