arm64: mm: Always make sw-dirty PTEs hw-dirty in pte_modify
[platform/kernel/linux-starfive.git] / arch / arm64 / include / asm / pgtable.h
index 7f7d9b1..07bdf5d 100644 (file)
@@ -826,6 +826,12 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
                pte = set_pte_bit(pte, __pgprot(PTE_DIRTY));
 
        pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
+       /*
+        * If we end up clearing hw dirtiness for a sw-dirty PTE, set hardware
+        * dirtiness again.
+        */
+       if (pte_sw_dirty(pte))
+               pte = pte_mkdirty(pte);
        return pte;
 }