summaryrefslogtreecommitdiffstats
path: root/sys/arm64
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2017-04-24 07:52:44 +0000
committerkib <kib@FreeBSD.org>2017-04-24 07:52:44 +0000
commitf36a0be961e835af2feb682ac43d13f1d081b964 (patch)
treea9b935cc4b15e7818926aaaabb7104089acd7c6d /sys/arm64
parentb4740b046f8d26d0c17c438a6ccf6a48d4610c9c (diff)
downloadFreeBSD-src-f36a0be961e835af2feb682ac43d13f1d081b964.zip
FreeBSD-src-f36a0be961e835af2feb682ac43d13f1d081b964.tar.gz
MFC r316679:
Do not lose dirty bits for removing PROT_WRITE on arm64.
Diffstat (limited to 'sys/arm64')
-rw-r--r--sys/arm64/arm64/pmap.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index 500aeb3..6839758 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -2481,6 +2481,11 @@ pmap_protect(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, vm_prot_t prot)
sva += L3_SIZE) {
l3 = pmap_load(l3p);
if (pmap_l3_valid(l3)) {
+ if ((l3 & ATTR_SW_MANAGED) &&
+ pmap_page_dirty(l3)) {
+ vm_page_dirty(PHYS_TO_VM_PAGE(l3 &
+ ~ATTR_MASK));
+ }
pmap_set(l3p, ATTR_AP(ATTR_AP_RO));
PTE_SYNC(l3p);
/* XXX: Use pmap_invalidate_range */
OpenPOWER on IntegriCloud