diff options
author | jchandra <jchandra@FreeBSD.org> | 2010-08-08 12:23:02 +0000 |
---|---|---|
committer | jchandra <jchandra@FreeBSD.org> | 2010-08-08 12:23:02 +0000 |
commit | 3cf0160b652aa23bf1b5f2dc6fc5850c9550e96d (patch) | |
tree | b757154e1cffde7091be8a71fb2c514681301c45 | |
parent | 3543635e2fc07ffb7e558ce85fb6491a1995c431 (diff) | |
download | FreeBSD-src-3cf0160b652aa23bf1b5f2dc6fc5850c9550e96d.zip FreeBSD-src-3cf0160b652aa23bf1b5f2dc6fc5850c9550e96d.tar.gz |
loadandclear() for PTEs are not needed on MIPS. The PTEs are software
managed and we already take pmap lock for PTE operations(see r210922)
Reviewed by: alc
-rw-r--r-- | sys/mips/mips/pmap.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/mips/mips/pmap.c b/sys/mips/mips/pmap.c index 929a7c6..e7d3c20 100644 --- a/sys/mips/mips/pmap.c +++ b/sys/mips/mips/pmap.c @@ -1352,9 +1352,11 @@ retry: pmap->pm_stats.resident_count--; pte = pmap_pte(pmap, va); KASSERT(pte != NULL, ("pte")); - oldpte = loadandclear((u_int *)pte); + oldpte = *pte; if (is_kernel_pmap(pmap)) *pte = PTE_G; + else + *pte = 0; KASSERT(!pte_test(&oldpte, PTE_W), ("wired pte for unwired page")); if (m->md.pv_flags & PV_TABLE_REF) @@ -1494,9 +1496,11 @@ pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t va) mtx_assert(&vm_page_queue_mtx, MA_OWNED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); - oldpte = loadandclear((u_int *)ptq); + oldpte = *ptq; if (is_kernel_pmap(pmap)) *ptq = PTE_G; + else + *ptq = 0; if (pte_test(&oldpte, PTE_W)) pmap->pm_stats.wired_count -= 1; @@ -1657,9 +1661,11 @@ pmap_remove_all(vm_page_t m) pte = pmap_pte(pv->pv_pmap, pv->pv_va); - tpte = loadandclear((u_int *)pte); + tpte = *pte; if (is_kernel_pmap(pv->pv_pmap)) *pte = PTE_G; + else + *pte = 0; if (pte_test(&tpte, PTE_W)) pv->pv_pmap->pm_stats.wired_count--; |