summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/aim
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2012-03-14 20:19:49 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2012-03-14 20:19:49 +0000
commit71beaf7fd7f9288403495c3ae724b81306eed265 (patch)
treeddadabd1bc0fe7f272d0168be9ee5ef48ca6c17e /sys/powerpc/aim
parent8dc16cc83eb816a1af41deb284900cefbf64abfb (diff)
downloadFreeBSD-src-71beaf7fd7f9288403495c3ae724b81306eed265.zip
FreeBSD-src-71beaf7fd7f9288403495c3ae724b81306eed265.tar.gz
Use LIST_FOREACH_SAFE() instead of LIST_FOREACH() in pmap_remove(), since
the point of this loop is to remove elements. This worked by accident before. MFC after: 2 days
Diffstat (limited to 'sys/powerpc/aim')
-rw-r--r--sys/powerpc/aim/mmu_oea.c4
-rw-r--r--sys/powerpc/aim/mmu_oea64.c4
2 files changed, 4 insertions, 4 deletions
diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c
index 5a8967d..407c40c 100644
--- a/sys/powerpc/aim/mmu_oea.c
+++ b/sys/powerpc/aim/mmu_oea.c
@@ -1794,7 +1794,7 @@ moea_release(mmu_t mmu, pmap_t pmap)
void
moea_remove(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva)
{
- struct pvo_entry *pvo;
+ struct pvo_entry *pvo, *tpvo;
int pteidx;
vm_page_lock_queues();
@@ -1806,7 +1806,7 @@ moea_remove(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva)
moea_pvo_remove(pvo, pteidx);
}
} else {
- LIST_FOREACH(pvo, &pm->pmap_pvo, pvo_plink) {
+ LIST_FOREACH_SAFE(pvo, &pm->pmap_pvo, pvo_plink, tpvo) {
if (PVO_VADDR(pvo) < sva || PVO_VADDR(pvo) >= eva)
continue;
moea_pvo_remove(pvo, -1);
diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c
index 84680b6..1bd88c4 100644
--- a/sys/powerpc/aim/mmu_oea64.c
+++ b/sys/powerpc/aim/mmu_oea64.c
@@ -2039,7 +2039,7 @@ moea64_release(mmu_t mmu, pmap_t pmap)
void
moea64_remove(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva)
{
- struct pvo_entry *pvo;
+ struct pvo_entry *pvo, *tpvo;
vm_page_lock_queues();
PMAP_LOCK(pm);
@@ -2050,7 +2050,7 @@ moea64_remove(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva)
moea64_pvo_remove(mmu, pvo);
}
} else {
- LIST_FOREACH(pvo, &pm->pmap_pvo, pvo_plink) {
+ LIST_FOREACH_SAFE(pvo, &pm->pmap_pvo, pvo_plink, tpvo) {
if (PVO_VADDR(pvo) < sva || PVO_VADDR(pvo) >= eva)
continue;
moea64_pvo_remove(mmu, pvo);
OpenPOWER on IntegriCloud