From 61e7fdf1eb7d5d4a66c443fe6bd16fd2a2a92859 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Sat, 3 Feb 2024 21:38:57 -0500 Subject: acpi table loading and shutdown works, plus mmap fix :3 --- src/arch/amd64/paging.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/arch/amd64/paging.c') diff --git a/src/arch/amd64/paging.c b/src/arch/amd64/paging.c index a80737c..c857d0b 100644 --- a/src/arch/amd64/paging.c +++ b/src/arch/amd64/paging.c @@ -539,20 +539,20 @@ void paging_init(void) { static inline void *page_align(void *addr) { uintptr_t a = (uintptr_t) addr; - a += PAGE_SIZE - 1; a /= PAGE_SIZE; a *= PAGE_SIZE; return (void *) a; } void *mmap(void *addr, size_t len) { - len += (long)addr % PAGE_SIZE; - long pages = (len + PAGE_SIZE - 1) / PAGE_SIZE; + void *phys = page_align(addr); + ptrdiff_t error = (char*)addr - (char*)phys; + len += error; + long pages = len / PAGE_SIZE + 1; void *virt = virtaddr_alloc(pages); if (virt == NULL) { return NULL; } - void *phys = page_align(addr); if (map_pages( kernel_pml4, virt, @@ -563,7 +563,7 @@ void *mmap(void *addr, size_t len) { virtaddr_free(virt); return NULL; } - return virt; + return (char*)virt + error; } void unmap(void *addr) { -- cgit v1.2.3-freya