enable global pages for the kernelspace

This commit is contained in:
Steffen Vogel 2013-12-03 15:54:58 +01:00
parent fff2708c5a
commit 4514080014
2 changed files with 5 additions and 2 deletions

View file

@ -241,7 +241,7 @@ identity_page:
shr edi, 9 ; (edi >> 12) * 8 (index for boot_pgt)
add edi, boot_pgt
mov ebx, eax
or ebx, 0x13 ; set present, writable and cache disable bits
or ebx, 0x113 ; set present, global, writable and cache disable bits
mov DWORD [edi], ebx
pop ebx
@ -301,7 +301,7 @@ map_kernel:
shr edi, 9 ; (edi >> 12) * 8 (index for boot_pgt)
add edi, boot_pgt
mov ebx, kernel_start
or ebx, 0x00000003 ; set present and writable flags
or ebx, 0x103 ; set present, global and writable flags
mov ecx, kernel_end ; determine kernel size in number of pages
sub ecx, kernel_start
shr ecx, 12

View file

@ -524,6 +524,9 @@ int arch_paging_init(void)
irq_uninstall_handler(14);
irq_install_handler(14, pagefault_handler);
// enable global pages for kernel space (CR4.PGE, see IA32 Vol3 4.10.2.4)
write_cr4(read_cr4() | (1 << 7));
// setup recursive paging
boot_pml4.entries[PAGE_MAP_ENTRIES-1] = (size_t) &boot_pml4 | KERN_TABLE;