summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/powerpc
diff options
context:
space:
mode:
authorbenno <benno@FreeBSD.org>2002-05-10 06:27:08 +0000
committerbenno <benno@FreeBSD.org>2002-05-10 06:27:08 +0000
commitbd96241d2b893d8203ce3bab7501b05f0475a9c5 (patch)
tree1d136c6ed8fd2202798765ce7a13a8489aff32dc /sys/powerpc/powerpc
parentdbd3c3b30ba7afff0761e223567a4b52ffbf00d8 (diff)
downloadFreeBSD-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/powerpc')
-rw-r--r--sys/powerpc/powerpc/mmu_oea.c5
-rw-r--r--sys/powerpc/powerpc/pmap.c5
2 files changed, 8 insertions, 2 deletions
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;
}
OpenPOWER on IntegriCloud