diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2003-09-02 20:57:22 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2003-09-02 20:57:22 +0000 |
commit | 6ee029983706816035b9c3890c14cfbe54cdcec1 (patch) | |
tree | 8612660103a2708ea0e1732c979f16feb6eb2043 /sys | |
parent | c95ccbbe77f1e1508f40b6b07228d586082cebf2 (diff) |
User mode page faults for page zero require special treatment to prevent
a recursive DAE.
Scientists say this is proof that there's a ``strange attractor'' in the
m88k processors. What is certain, though, is that the processors'
documentation contains black holes.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/mvme88k/mvme88k/trap.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/sys/arch/mvme88k/mvme88k/trap.c b/sys/arch/mvme88k/mvme88k/trap.c index 593ae28e294..b5cfa62e988 100644 --- a/sys/arch/mvme88k/mvme88k/trap.c +++ b/sys/arch/mvme88k/mvme88k/trap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: trap.c,v 1.43 2003/09/02 10:35:53 miod Exp $ */ +/* $OpenBSD: trap.c,v 1.44 2003/09/02 20:57:21 miod Exp $ */ /* * Copyright (c) 1998 Steve Murphree, Jr. * Copyright (c) 1996 Nivas Madhur @@ -451,6 +451,24 @@ user_fault: va = trunc_page((vm_offset_t)fault_addr); + /* + * XXX + * Page faults for addresses in page zero _SEEM TO BE_ special. + * For some reason, we will keep faulting with the same + * cause when the interrupts get enabled, later in the + * exception process, and eventually eat all the interrupt + * stack in a recursive DAE. + * Since accesses to this page will always result in a + * SIGSEGV, we can safely clear the DAE condition here. + * + * (behaviour experienced on MVME187C) + */ + if (va == 0) { + frame->dpfsr = 0; + frame->dmt0 = 0; + result = EFAULT; + } + vm = p->p_vmspace; map = &vm->vm_map; |