summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-06-05 20:19:14 -0400
committerIan Moffett <ian@osmora.org>2025-06-05 20:19:14 -0400
commit2ee849430431a430a0c9d40f73dc0b198a260977 (patch)
treebdf5bf7ee968d11c333e9fe89b4190d001aac30e /sys
parent660f45370e4814ac9d192465e9c2ceb3b62b7ff8 (diff)
kernel: vm: Map at `va + page_off'
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys')
-rw-r--r--sys/vm/vm_map.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 0ff3763..e0644fa 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -173,6 +173,7 @@ mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off)
paddr_t pa;
vaddr_t va;
size_t misalign;
+ off_t page_off;
misalign = len & (DEFAULT_PAGESIZE - 1);
len = ALIGN_UP(len + misalign, DEFAULT_PAGESIZE);
@@ -269,6 +270,7 @@ mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off)
for (int i = 0; i < npgs; ++i) {
pg = vm_pagealloc(map_obj, PALLOC_ZERO);
+ page_off = i * DEFAULT_PAGESIZE;
if (pg == NULL) {
/* TODO */
@@ -277,7 +279,7 @@ mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off)
}
pa = pg->phys_addr;
- error = vm_map(vas, va, pa, prot, len);
+ error = vm_map(vas, va + page_off, pa, prot, len);
if (error < 0) {
pr_error("mmap: failed to map page (retval=%x)\n", error);
return NULL;