From bd96241d2b893d8203ce3bab7501b05f0475a9c5 Mon Sep 17 00:00:00 2001 From: benno Date: Fri, 10 May 2002 06:27:08 +0000 Subject: Improve our detection of an attempted duplicate entry. We may be trying to change the page protection bits. --- sys/powerpc/aim/mmu_oea.c | 5 ++++- sys/powerpc/powerpc/mmu_oea.c | 5 ++++- sys/powerpc/powerpc/pmap.c | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) (limited to 'sys/powerpc') 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; } -- cgit v1.1