summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2003-09-02 20:57:22 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2003-09-02 20:57:22 +0000
commit6ee029983706816035b9c3890c14cfbe54cdcec1 (patch)
tree8612660103a2708ea0e1732c979f16feb6eb2043 /sys
parentc95ccbbe77f1e1508f40b6b07228d586082cebf2 (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.c20
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;