diff --git a/src/kernel/boot/boot_PT.S b/src/kernel/boot/boot_PT.S index 7e4d4f3..b8808e2 100644 --- a/src/kernel/boot/boot_PT.S +++ b/src/kernel/boot/boot_PT.S @@ -10,20 +10,20 @@ BootP4: .rept ENTRIES_PER_PT - 2 .quad 0 .endr - .quad offset V2P(BootP3) + (PAGE_PRESENT | PAGE_WRITE) + .quad offset V2P(BootP3) + (PAGE_GLOBAL | PAGE_PRESENT | PAGE_WRITE) BootP3: - .quad offset V2P(BootP2) + (PAGE_PRESENT | PAGE_WRITE) + .quad offset V2P(BootP2) + (PAGE_GLOBAL | PAGE_PRESENT | PAGE_WRITE) .rept ENTRIES_PER_PT - 1 .quad 0 .endr BootP2: - .quad offset V2P(BootP1) + (PAGE_PRESENT | PAGE_WRITE) + .quad offset V2P(BootP1) + (PAGE_GLOBAL | PAGE_PRESENT | PAGE_WRITE) .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_GLOBAL | PAGE_PRESENT | PAGE_WRITE) .set i, (i+1) .endr \ No newline at end of file diff --git a/src/kernel/drivers/terminal/fbterm.c b/src/kernel/drivers/terminal/fbterm.c index f2c45a8..c76dba9 100644 --- a/src/kernel/drivers/terminal/fbterm.c +++ b/src/kernel/drivers/terminal/fbterm.c @@ -38,7 +38,7 @@ void fbterm_init(struct fbinfo *fbinfo) for(uintptr_t p = (uintptr_t)kernel_fb.addr; p < ((uintptr_t)kernel_fb.addr + kernel_fb.size); p += PAGE_SIZE) { - vmm_set_page(kernel_P4, p, V2P(p), PAGE_WRITE | PAGE_PRESENT); + vmm_set_page(kernel_P4, p, V2P(p), PAGE_GLOBAL | PAGE_WRITE | PAGE_PRESENT); } draw_rect(&kernel_fb, 20, 20, 8*VGA_COLS+8, 16*VGA_ROWS+8, RGB(255, 0, 0)); diff --git a/src/kernel/include/memory.h b/src/kernel/include/memory.h index 47cfcfe..50ee225 100644 --- a/src/kernel/include/memory.h +++ b/src/kernel/include/memory.h @@ -6,6 +6,7 @@ #define PAGE_PRESENT 0x001 #define PAGE_WRITE 0x002 +#define PAGE_GLOBAL 0x100 #define PAGE_SIZE 0x1000 #define ENTRIES_PER_PT 512 diff --git a/src/kernel/memory/kbrk.c b/src/kernel/memory/kbrk.c index 483840f..f8da3de 100644 --- a/src/kernel/memory/kbrk.c +++ b/src/kernel/memory/kbrk.c @@ -9,7 +9,7 @@ long k_brk(long brk, long, long, long, long, long) if(brk) { while(_brk < brk) { - vmm_set_page(kernel_P4, _brk, pmm_alloc(), PAGE_WRITE | PAGE_PRESENT); + vmm_set_page(kernel_P4, _brk, pmm_alloc(), PAGE_GLOBAL | PAGE_WRITE | PAGE_PRESENT); _brk += PAGE_SIZE; } return _brk; @@ -29,7 +29,7 @@ long k_mmap(long addr, long length, long prot, long flags, long fd, long offset) long retval = _mmap; while(length > 0) { - vmm_set_page(kernel_P4, _mmap, pmm_alloc(), PAGE_WRITE | PAGE_PRESENT); + vmm_set_page(kernel_P4, _mmap, pmm_alloc(), PAGE_GLOBAL | PAGE_WRITE | PAGE_PRESENT); _mmap += PAGE_SIZE; length -= PAGE_SIZE; } diff --git a/src/kernel/memory/memory.c b/src/kernel/memory/memory.c index b0c0eaa..2da61bc 100644 --- a/src/kernel/memory/memory.c +++ b/src/kernel/memory/memory.c @@ -20,7 +20,7 @@ void memory_init() uint64_t page = vmm_get_page(kernel_P4, vaddr); if(page == (uint64_t)-1 || !(page & PAGE_PRESENT)) { - uint16_t flags = PAGE_WRITE | PAGE_PRESENT; + uint16_t flags = PAGE_GLOBAL | PAGE_WRITE | PAGE_PRESENT; vmm_set_page(kernel_P4, vaddr, p, flags); }