diff options
| -rw-r--r-- | sys/i386/i386/pmap.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index ed76cb998735..e28069907fa5 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -3150,7 +3150,6 @@ pmap_ts_referenced(vm_page_t m) pv_entry_t pv, pvf, pvn; pmap_t pmap; pt_entry_t *pte; - pt_entry_t v; int rtval = 0; if (m->flags & PG_FICTITIOUS) @@ -3166,14 +3165,12 @@ pmap_ts_referenced(vm_page_t m) pmap = PV_PMAP(pv); PMAP_LOCK(pmap); pte = pmap_pte_quick(pmap, pv->pv_va); - if (pte && ((v = pte_load(pte)) & PG_A) != 0) { + if ((*pte & PG_A) != 0) { atomic_clear_int((u_int *)pte, PG_A); pmap_invalidate_page(pmap, pv->pv_va); rtval++; - if (rtval > 4) { - PMAP_UNLOCK(pmap); - break; - } + if (rtval > 4) + pvn = NULL; } PMAP_UNLOCK(pmap); } while ((pv = pvn) != NULL && pv != pvf); |
