summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2009-05-19 16:16:44 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2009-05-19 16:16:44 +0000
commit7c95070aecfcb51340eeb567196d6f0025548089 (patch)
tree27410da26290825a33f8d3249e1ed2a17be00889 /sys/arch
parentbb426317f9472082d5f6b2ffb02058cd1a8c3db1 (diff)
Processing AST can trigger more AST. Loop on astpending instead of checking
only once.
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/mips64/mips64/exception.S12
1 files changed, 10 insertions, 2 deletions
diff --git a/sys/arch/mips64/mips64/exception.S b/sys/arch/mips64/mips64/exception.S
index 11bb3a88711..872215dd002 100644
--- a/sys/arch/mips64/mips64/exception.S
+++ b/sys/arch/mips64/mips64/exception.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: exception.S,v 1.16 2008/03/20 22:54:49 miod Exp $ */
+/* $OpenBSD: exception.S,v 1.17 2009/05/19 16:16:43 miod Exp $ */
/*
* Copyright (c) 2002-2003 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -244,6 +244,7 @@ NNON_LEAF(u_intr, FRAMESZ(CF_SZ), ra)
jal interrupt
PTR_S a3, CF_RA_OFFS(sp) # for debugging
+0:
lw v0, astpending # any pending interrupts?
beq v0, zero, 4f
nop
@@ -300,6 +301,9 @@ NNON_LEAF(u_intr, FRAMESZ(CF_SZ), ra)
PTR_L t0, curprocpaddr
RESTORE_CPU_SREG(t0, 0)
+ b 0b
+ nop
+
4:
mfc0 t0, COP_0_STATUS_REG # dis int preserve settings.
li t1, ~SR_INT_ENAB
@@ -421,8 +425,9 @@ NNON_LEAF(u_general, FRAMESZ(CF_SZ), ra)
jal trap
PTR_S a3, CF_RA_OFFS(sp) # for debugging
+0:
lw v0, astpending
- beq v0, zero, 4f
+ beqz v0, 4f
nop
PTR_L t0, curprocpaddr
@@ -434,6 +439,9 @@ NNON_LEAF(u_general, FRAMESZ(CF_SZ), ra)
PTR_L t0, curprocpaddr
RESTORE_CPU_SREG(t0, 0)
+ b 0b
+ nop
+
4:
#ifdef PERFCNTRS
lw t0, cpu_is_rm7k