diff --git a/src/kernel/boot/boot_PT.S b/src/kernel/boot/boot_PT.S index cd94231..632bf7a 100644 --- a/src/kernel/boot/boot_PT.S +++ b/src/kernel/boot/boot_PT.S @@ -9,20 +9,20 @@ BootP4: .rept ENTRIES_PER_PT - 2 .quad 0 .endr - .quad offset V2P(BootP3) + (PAGE_PRESENT | PAGE_WRITE) + .quad offset V2P(BootP3) + (PAGE_PRESENT | PAGE_WRITE | PAGE_GLOBAL) BootP3: - .quad offset V2P(BootP2) + (PAGE_PRESENT | PAGE_WRITE) + .quad offset V2P(BootP2) + (PAGE_PRESENT | PAGE_WRITE | PAGE_GLOBAL) .rept ENTRIES_PER_PT - 1 .quad 0 .endr BootP2: - .quad offset V2P(BootP1) + (PAGE_PRESENT | PAGE_WRITE) + .quad offset V2P(BootP1) + (PAGE_PRESENT | PAGE_WRITE | PAGE_GLOBAL) .rept ENTRIES_PER_PT - 1 .quad 0 .endr BootP1: .set i, 0 .rept ENTRIES_PER_PT - .quad (i << 12) + (PAGE_PRESENT | PAGE_WRITE) + .quad (i << 12) + (PAGE_PRESENT | PAGE_WRITE | PAGE_GLOBAL) .set i, (i+1) .endr diff --git a/src/kernel/boot/kmain.c b/src/kernel/boot/kmain.c index 4cd2a38..6611297 100644 --- a/src/kernel/boot/kmain.c +++ b/src/kernel/boot/kmain.c @@ -30,8 +30,8 @@ void kmain(uint64_t multiboot_magic, void *multiboot_data) continue; if(vmm_get_page(&BootP4, (uintptr_t)P2V(p)) == (uintptr_t)-1) { - touch_page(&BootP4, (uintptr_t)P2V(p), PAGE_WRITE | PAGE_HUGE); - vmm_set_page(&BootP4, (uintptr_t)P2V(p), p, PAGE_HUGE | PAGE_WRITE | PAGE_PRESENT); + touch_page(&BootP4, (uintptr_t)P2V(p), PAGE_GLOBAL | PAGE_WRITE | PAGE_HUGE); + vmm_set_page(&BootP4, (uintptr_t)P2V(p), p, PAGE_GLOBAL | PAGE_HUGE | PAGE_WRITE | PAGE_PRESENT); } if(type == 1) pmm_free(p); diff --git a/src/kernel/include/memory.h b/src/kernel/include/memory.h index 7ec8b0f..378048e 100644 --- a/src/kernel/include/memory.h +++ b/src/kernel/include/memory.h @@ -19,6 +19,7 @@ #define PAGE_PRESENT 0x001 #define PAGE_WRITE 0x002 #define PAGE_HUGE 0x080 +#define PAGE_GLOBAL 0x100 #define PAGE_SIZE 0x1000 #define ENTRIES_PER_PT 512