diff --git a/arch/x86/kernel/entry.asm b/arch/x86/kernel/entry.asm index a2ef9e7b0..0182d5294 100644 --- a/arch/x86/kernel/entry.asm +++ b/arch/x86/kernel/entry.asm @@ -176,7 +176,7 @@ start64: mov rdi, rax shr rdi, 9 ; (edi >> 12) * 8 (index for boot_pgt) add rdi, boot_pgt - or rax, 0x103 ; set present, global and writable bits + or rax, 0x23 ; set present, accessed and writable bits mov QWORD [rdi], rax Lno_mbinfo: ; remap kernel @@ -184,7 +184,7 @@ Lno_mbinfo: shr rdi, 18 ; (edi >> 21) * 8 (index for boot_pgd) add rdi, boot_pgd mov rax, [base] - or rax, 0x83 ; PG_GLOBAL isn't required because HermitCore is a single-address space OS + or rax, 0xA3 ; PG_GLOBAL isn't required because HermitCore is a single-address space OS xor rcx, rcx mov rsi, 510*0x200000 sub rsi, kernel_start diff --git a/arch/x86/mm/page.c b/arch/x86/mm/page.c index 632fe32c1..af4b7c791 100644 --- a/arch/x86/mm/page.c +++ b/arch/x86/mm/page.c @@ -160,9 +160,9 @@ int __page_map(size_t viraddr, size_t phyaddr, size_t npages, size_t bits, uint8 /* Reference the new table within its parent */ #if 0 - self[lvl][vpn] = paddr | bits | PG_PRESENT | PG_USER | PG_RW | PG_ACCESSED; + self[lvl][vpn] = paddr | bits | PG_PRESENT | PG_USER | PG_RW | PG_ACCESSED | PG_DIRTY; #else - self[lvl][vpn] = (paddr | bits | PG_PRESENT | PG_USER | PG_RW | PG_ACCESSED) & ~PG_XD; + self[lvl][vpn] = (paddr | bits | PG_PRESENT | PG_USER | PG_RW | PG_ACCESSED | PG_DIRTY) & ~PG_XD; #endif /* Fill new table with zeros */ @@ -178,7 +178,7 @@ int __page_map(size_t viraddr, size_t phyaddr, size_t npages, size_t bits, uint8 send_ipi = flush = 1; } - self[lvl][vpn] = phyaddr | bits | PG_PRESENT | PG_ACCESSED; + self[lvl][vpn] = phyaddr | bits | PG_PRESENT | PG_ACCESSED | PG_DIRTY; if (flush) /* There's already a page mapped at this address.