From 2abe7e3e878b9b4ed3660b8f10eaf3caef2e0ea1 Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Tue, 25 Jun 2024 13:00:47 -0500 Subject: arch: i386: paging: reserve the last page table Reserve the last, usable page table for temporary mappings, such as those required by the physical memory manager. Signed-off-by: Danny Holman --- arch/i386/kernel/paging.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/i386/kernel/paging.c b/arch/i386/kernel/paging.c index b8e00af..a0bbb92 100644 --- a/arch/i386/kernel/paging.c +++ b/arch/i386/kernel/paging.c @@ -20,10 +20,13 @@ void paging_init(void) { pt[GET_PTX(GET_VADDR(i))] = i | PD_PRES; unmap_page(PAGE_TMP_MAP); + uintptr_t temp_pt = pfa_alloc(1); + uintptr_t phys_pd = pfa_alloc(1); map_page(phys_pd, PAGE_TMP_MAP, PD_PRES | PD_RW); uintptr_t *pd = (uintptr_t*)PAGE_TMP_MAP; pd[GET_PDX(GET_VADDR(KSTART))] = phys_pt | PD_PRES | PD_RW; + pd[GET_PDX(PAGE_TMP_MAP)] = temp_pt | PD_PRES | PD_RW; pd[1023] = phys_pd | PD_PRES | PD_RW; unmap_page(PAGE_TMP_MAP); -- cgit v1.2.3