diff options
Diffstat (limited to 'sys/powerpc')
-rw-r--r-- | sys/powerpc/aim/mmu_oea.c | 5 | ||||
-rw-r--r-- | sys/powerpc/powerpc/mmu_oea.c | 5 | ||||
-rw-r--r-- | sys/powerpc/powerpc/pmap.c | 5 |
3 files changed, 12 insertions, 3 deletions
diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c index c61800d..076deab 100644 --- a/sys/powerpc/aim/mmu_oea.c +++ b/sys/powerpc/aim/mmu_oea.c @@ -1728,8 +1728,11 @@ pmap_pvo_enter(pmap_t pm, uma_zone_t zone, struct pvo_head *pvo_head, */ LIST_FOREACH(pvo, &pmap_pvo_table[ptegidx], pvo_olink) { if (pvo->pvo_pmap == pm && PVO_VADDR(pvo) == va) { - if ((pvo->pvo_pte.pte_lo & PTE_RPGN) == pa) + if ((pvo->pvo_pte.pte_lo & PTE_RPGN) == pa && + (pvo->pvo_pte.pte_lo & PTE_PP) == + (pte_lo & PTE_PP)) { return (0); + } pmap_pvo_remove(pvo, -1); break; } diff --git a/sys/powerpc/powerpc/mmu_oea.c b/sys/powerpc/powerpc/mmu_oea.c index c61800d..076deab 100644 --- a/sys/powerpc/powerpc/mmu_oea.c +++ b/sys/powerpc/powerpc/mmu_oea.c @@ -1728,8 +1728,11 @@ pmap_pvo_enter(pmap_t pm, uma_zone_t zone, struct pvo_head *pvo_head, */ LIST_FOREACH(pvo, &pmap_pvo_table[ptegidx], pvo_olink) { if (pvo->pvo_pmap == pm && PVO_VADDR(pvo) == va) { - if ((pvo->pvo_pte.pte_lo & PTE_RPGN) == pa) + if ((pvo->pvo_pte.pte_lo & PTE_RPGN) == pa && + (pvo->pvo_pte.pte_lo & PTE_PP) == + (pte_lo & PTE_PP)) { return (0); + } pmap_pvo_remove(pvo, -1); break; } diff --git a/sys/powerpc/powerpc/pmap.c b/sys/powerpc/powerpc/pmap.c index c61800d..076deab 100644 --- a/sys/powerpc/powerpc/pmap.c +++ b/sys/powerpc/powerpc/pmap.c @@ -1728,8 +1728,11 @@ pmap_pvo_enter(pmap_t pm, uma_zone_t zone, struct pvo_head *pvo_head, */ LIST_FOREACH(pvo, &pmap_pvo_table[ptegidx], pvo_olink) { if (pvo->pvo_pmap == pm && PVO_VADDR(pvo) == va) { - if ((pvo->pvo_pte.pte_lo & PTE_RPGN) == pa) + if ((pvo->pvo_pte.pte_lo & PTE_RPGN) == pa && + (pvo->pvo_pte.pte_lo & PTE_PP) == + (pte_lo & PTE_PP)) { return (0); + } pmap_pvo_remove(pvo, -1); break; } |