diff options
author | alc <alc@FreeBSD.org> | 2012-07-19 05:34:19 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2012-07-19 05:34:19 +0000 |
commit | 15616692040d4187c2a00e5a138d5760a8254f15 (patch) | |
tree | 74010ce921386fc4656f29dd8afaa19304fc64ab /sys/amd64 | |
parent | 0dca43b8b695db49dfb86c25705dda7b518cafa3 (diff) | |
download | FreeBSD-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.c | 12 |
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 && |