summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2004-01-02 23:45:04 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2004-01-02 23:45:04 +0000
commit3465f5fbfb39c3ac75aec382cee02f481a908fcf (patch)
treebbbe7fa3a204fec3c965f7b4f76ebfe81ac369c8 /sys
parent78449ff56c37c17a1aef8ee23b97764a10b73b1d (diff)
MC88110 errata states that, for instruction faults, in case of bus error
trap class, the value of the page fault and segment fault bits are undefined; so check for bus error first.
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/mvme88k/mvme88k/trap.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/arch/mvme88k/mvme88k/trap.c b/sys/arch/mvme88k/mvme88k/trap.c
index fd2c3ad1369..050e1fc7ae2 100644
--- a/sys/arch/mvme88k/mvme88k/trap.c
+++ b/sys/arch/mvme88k/mvme88k/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.62 2003/12/24 15:30:13 miod Exp $ */
+/* $OpenBSD: trap.c,v 1.63 2004/01/02 23:45:03 miod Exp $ */
/*
* Copyright (c) 1998 Steve Murphree, Jr.
* Copyright (c) 1996 Nivas Madhur
@@ -953,16 +953,16 @@ m88110_user_fault:
}
} else {
/* instruction faults */
+ if (frame->isr &
+ (CMMU_ISR_BE | CMMU_ISR_SP | CMMU_ISR_TBE)) {
+ /* bus error, supervisor protection */
+ result = EACCES;
+ } else
if (frame->isr & (CMMU_ISR_SI | CMMU_ISR_PI)) {
/* segment or page fault */
result = uvm_fault(map, va, VM_FAULT_INVALID, ftype);
if (result == EACCES)
result = EFAULT;
- } else
- if (frame->isr &
- (CMMU_ISR_BE | CMMU_ISR_SP | CMMU_ISR_TBE)) {
- /* bus error, supervisor protection */
- result = EACCES;
} else {
#ifdef DEBUG
printf("unexpected instr fault dsr %x\n",