diff options
author | Ian Moffett <ian@osmora.org> | 2025-06-05 20:19:14 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-06-05 20:19:14 -0400 |
commit | 2ee849430431a430a0c9d40f73dc0b198a260977 (patch) | |
tree | bdf5bf7ee968d11c333e9fe89b4190d001aac30e | |
parent | 660f45370e4814ac9d192465e9c2ceb3b62b7ff8 (diff) |
kernel: vm: Map at `va + page_off'
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | sys/vm/vm_map.c | 4 |
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; |