diff options
author | benno <benno@FreeBSD.org> | 2002-05-10 06:27:08 +0000 |
---|---|---|
committer | benno <benno@FreeBSD.org> | 2002-05-10 06:27:08 +0000 |
commit | bd96241d2b893d8203ce3bab7501b05f0475a9c5 (patch) | |
tree | 1d136c6ed8fd2202798765ce7a13a8489aff32dc /sys/powerpc | |
parent | dbd3c3b30ba7afff0761e223567a4b52ffbf00d8 (diff) | |
download | FreeBSD-src-bd96241d2b893d8203ce3bab7501b05f0475a9c5.zip FreeBSD-src-bd96241d2b893d8203ce3bab7501b05f0475a9c5.tar.gz |
Improve our detection of an attempted duplicate entry. We may be trying to
change the page protection bits.
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; } |