summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjchandra <jchandra@FreeBSD.org>2010-08-08 12:23:02 +0000
committerjchandra <jchandra@FreeBSD.org>2010-08-08 12:23:02 +0000
commit3cf0160b652aa23bf1b5f2dc6fc5850c9550e96d (patch)
treeb757154e1cffde7091be8a71fb2c514681301c45
parent3543635e2fc07ffb7e558ce85fb6491a1995c431 (diff)
downloadFreeBSD-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.c12
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--;
OpenPOWER on IntegriCloud