svn commit: r342765 - head/sys/riscv/riscv
Mark Johnston
markj at FreeBSD.org
Fri Jan 4 17:10:17 UTC 2019
Author: markj
Date: Fri Jan 4 17:10:16 2019
New Revision: 342765
URL: https://svnweb.freebsd.org/changeset/base/342765
Log:
Fix dirty bit handling in pmap_remove_write().
Reviewed by: jhb, kib
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D18732
Modified:
head/sys/riscv/riscv/pmap.c
Modified: head/sys/riscv/riscv/pmap.c
==============================================================================
--- head/sys/riscv/riscv/pmap.c Fri Jan 4 17:08:45 2019 (r342764)
+++ head/sys/riscv/riscv/pmap.c Fri Jan 4 17:10:16 2019 (r342765)
@@ -2947,15 +2947,13 @@ retry_pv_loop:
}
}
l3 = pmap_l3(pmap, pv->pv_va);
-retry:
oldl3 = pmap_load(l3);
-
+retry:
if ((oldl3 & PTE_W) != 0) {
- newl3 = oldl3 & ~PTE_W;
- if (!atomic_cmpset_long(l3, oldl3, newl3))
+ newl3 = oldl3 & ~(PTE_D | PTE_W);
+ if (!atomic_fcmpset_long(l3, &oldl3, newl3))
goto retry;
- /* TODO: check for PTE_D? */
- if ((oldl3 & PTE_A) != 0)
+ if ((oldl3 & PTE_D) != 0)
vm_page_dirty(m);
pmap_invalidate_page(pmap, pv->pv_va);
}
More information about the svn-src-all
mailing list