Mark kernel page table entries as global
This commit is contained in:
parent
7d9a744cf2
commit
0272605d36
@ -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
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user