We need to set the dirty bit whenever we add write permission
authorkettenis <kettenis@openbsd.org>
Sun, 2 May 2021 19:43:16 +0000 (19:43 +0000)
committerkettenis <kettenis@openbsd.org>
Sun, 2 May 2021 19:43:16 +0000 (19:43 +0000)
otherwise a write will still fault on hardware that doesn't implement
hardware updates for these bits.

ok drahn@

sys/arch/riscv64/riscv64/pmap.c

index a38e92f..1b1ed7b 100644 (file)
@@ -219,23 +219,23 @@ VP_IDX3(vaddr_t va)
 const pt_entry_t ap_bits_user[8] = {
        [PROT_NONE]                             = PTE_U|PTE_A|PTE_R,
        [PROT_READ]                             = PTE_U|PTE_A|PTE_R,
-       [PROT_WRITE]                            = PTE_U|PTE_A|PTE_R|PTE_W,
-       [PROT_WRITE|PROT_READ]                  = PTE_U|PTE_A|PTE_R|PTE_W,
+       [PROT_WRITE]                            = PTE_U|PTE_A|PTE_R|PTE_D|PTE_W,
+       [PROT_WRITE|PROT_READ]                  = PTE_U|PTE_A|PTE_R|PTE_D|PTE_W,
        [PROT_EXEC]                             = PTE_U|PTE_A|PTE_X|PTE_R,
        [PROT_EXEC|PROT_READ]                   = PTE_U|PTE_A|PTE_X|PTE_R,
-       [PROT_EXEC|PROT_WRITE]                  = PTE_U|PTE_A|PTE_X|PTE_R|PTE_W,
-       [PROT_EXEC|PROT_WRITE|PROT_READ]        = PTE_U|PTE_A|PTE_X|PTE_R|PTE_W,
+       [PROT_EXEC|PROT_WRITE]                  = PTE_U|PTE_A|PTE_X|PTE_R|PTE_D|PTE_W,
+       [PROT_EXEC|PROT_WRITE|PROT_READ]        = PTE_U|PTE_A|PTE_X|PTE_R|PTE_D|PTE_W,
 };
 
 const pt_entry_t ap_bits_kern[8] = {
        [PROT_NONE]                             = PTE_A|PTE_R,
        [PROT_READ]                             = PTE_A|PTE_R,
-       [PROT_WRITE]                            = PTE_A|PTE_R|PTE_W,
-       [PROT_WRITE|PROT_READ]                  = PTE_A|PTE_R|PTE_W,
+       [PROT_WRITE]                            = PTE_A|PTE_R|PTE_D|PTE_W,
+       [PROT_WRITE|PROT_READ]                  = PTE_A|PTE_R|PTE_D|PTE_W,
        [PROT_EXEC]                             = PTE_A|PTE_X|PTE_R,
        [PROT_EXEC|PROT_READ]                   = PTE_A|PTE_X|PTE_R,
-       [PROT_EXEC|PROT_WRITE]                  = PTE_A|PTE_X|PTE_R|PTE_W,
-       [PROT_EXEC|PROT_WRITE|PROT_READ]        = PTE_A|PTE_X|PTE_R|PTE_W,
+       [PROT_EXEC|PROT_WRITE]                  = PTE_A|PTE_X|PTE_R|PTE_D|PTE_W,
+       [PROT_EXEC|PROT_WRITE|PROT_READ]        = PTE_A|PTE_X|PTE_R|PTE_D|PTE_W,
 };
 
 /*