diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2009-05-19 16:16:44 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2009-05-19 16:16:44 +0000 |
commit | 7c95070aecfcb51340eeb567196d6f0025548089 (patch) | |
tree | 27410da26290825a33f8d3249e1ed2a17be00889 /sys/arch | |
parent | bb426317f9472082d5f6b2ffb02058cd1a8c3db1 (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.S | 12 |
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 |