summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorNiklas Hallqvist <niklas@cvs.openbsd.org>1995-11-28 20:47:35 +0000
committerNiklas Hallqvist <niklas@cvs.openbsd.org>1995-11-28 20:47:35 +0000
commit446fc86daf6480408d292199f95833ddb1aceb06 (patch)
tree3bce5424d28d11f6916b951f95d00b9deee01e93 /sys
parentcda78a541426b318e93543cb257d2952503118ba (diff)
Fix SunOS emulation on 040
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/amiga/amiga/pmap.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/arch/amiga/amiga/pmap.c b/sys/arch/amiga/amiga/pmap.c
index 60697284291..145fc82e943 100644
--- a/sys/arch/amiga/amiga/pmap.c
+++ b/sys/arch/amiga/amiga/pmap.c
@@ -1390,9 +1390,15 @@ validate:
* AMIGA pages in a MACH page.
*/
#ifdef M68040
- if (mmutype == MMU_68040 && pmap == pmap_kernel() && va >= AMIGA_UPTBASE &&
- va < (AMIGA_UPTBASE + AMIGA_UPTMAXSIZE))
+ if (mmutype == MMU_68040 && pmap == pmap_kernel() &&
+ va >= AMIGA_UPTBASE && va < (AMIGA_UPTBASE + AMIGA_UPTMAXSIZE))
cacheable = FALSE; /* don't cache user page tables */
+
+ /* Don't cache if process can't take it, like SunOS ones. */
+ if (mmutype == MMU_68040 && pmap != pmap_kernel() &&
+ (curproc->p_md.md_flags & MDP_UNCACHE_WX) &&
+ (prot & VM_PROT_EXECUTE) && (prot & VM_PROT_WRITE))
+ checkpv = cacheable = FALSE;
#endif
npte = (pa & PG_FRAME) | pte_prot(pmap, prot) | PG_V;
npte |= (*(int *)pte & (PG_M|PG_U));