summaryrefslogtreecommitdiffstats
path: root/sys/amd64
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2012-07-19 05:34:19 +0000
committeralc <alc@FreeBSD.org>2012-07-19 05:34:19 +0000
commit15616692040d4187c2a00e5a138d5760a8254f15 (patch)
tree74010ce921386fc4656f29dd8afaa19304fc64ab /sys/amd64
parent0dca43b8b695db49dfb86c25705dda7b518cafa3 (diff)
downloadFreeBSD-src-15616692040d4187c2a00e5a138d5760a8254f15.zip
FreeBSD-src-15616692040d4187c2a00e5a138d5760a8254f15.tar.gz
Don't unnecessarily set PGA_REFERENCED in pmap_enter().
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/amd64/pmap.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index aee73a3..fe45a67 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -3576,13 +3576,9 @@ validate:
if ((origpte & PG_V) != 0) {
invlva = FALSE;
origpte = pte_load_store(pte, newpte);
- if ((origpte & PG_A) != 0) {
- if ((origpte & PG_MANAGED) != 0)
- vm_page_aflag_set(om, PGA_REFERENCED);
- if (opa != pa || ((origpte & PG_NX) == 0 &&
- (newpte & PG_NX) != 0))
- invlva = TRUE;
- }
+ if ((origpte & PG_A) != 0 && (opa != pa ||
+ ((origpte & PG_NX) == 0 && (newpte & PG_NX) != 0)))
+ invlva = TRUE;
if ((origpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) {
if ((origpte & PG_MANAGED) != 0)
vm_page_dirty(om);
@@ -3590,6 +3586,8 @@ validate:
invlva = TRUE;
}
if (opa != pa && (origpte & PG_MANAGED) != 0) {
+ if ((origpte & PG_A) != 0)
+ vm_page_aflag_set(om, PGA_REFERENCED);
CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, opa);
pmap_pvh_free(&om->md, pmap, va);
if ((om->aflags & PGA_WRITEABLE) != 0 &&
OpenPOWER on IntegriCloud