diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2005-11-27 11:06:16 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2005-11-27 11:06:16 +0000 |
commit | 3c1362a3a4d7d33034d4e0e519db583e03c8ecb4 (patch) | |
tree | 7145f91e31a5a6891850bcb8ed80134499ebdfb1 | |
parent | 4a378d36f3e91d2c0d3b718b5e4fd647d769991e (diff) |
In the core of the idle loop, be sure to invoke spl0 more than once to
process soft interrupts; fixes luna88k hanging after the rootdev line.
Tested aoyama@ martin@ and I
-rw-r--r-- | sys/arch/m88k/m88k/process.S | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/arch/m88k/m88k/process.S b/sys/arch/m88k/m88k/process.S index f171ea433b1..5b3b139e343 100644 --- a/sys/arch/m88k/m88k/process.S +++ b/sys/arch/m88k/m88k/process.S @@ -1,4 +1,4 @@ -/* $OpenBSD: process.S,v 1.9 2005/10/12 19:05:44 miod Exp $ */ +/* $OpenBSD: process.S,v 1.10 2005/11/27 11:06:15 miod Exp $ */ /* * Copyright (c) 1996 Nivas Madhur * All rights reserved. @@ -64,7 +64,7 @@ ASLOCAL(Lswsrunpanic) * The mapping of the pcb at p->p_addr has already been deleted, * and the memory for the pcb+stack has been freed. * The ipl is high enough to prevent the memory from being reallocated. - * switch_exit(proc * p) + * switch_exit(proc *p) */ ENTRY(switch_exit) @@ -127,7 +127,8 @@ ASLOCAL(cpu_switch_search) or.u r7, r0, hi16(_C_LABEL(whichqs)) ld r7, r7, lo16(_C_LABEL(whichqs)) bcnd ne0, r7, _ASM_LABEL(cpu_switch_found) -1: + +ASLOCAL(cpu_switch_idle) /* * There were no runnable processes. Enable all interrupts and * busy-wait for this to change. @@ -146,7 +147,7 @@ ASLOCAL(cpu_switch_search) FLUSH_PIPELINE 2: ld r7, r7, lo16(_C_LABEL(whichqs)) - bcnd eq0, r7, 2b + bcnd eq0, r7, _ASM_LABEL(cpu_switch_idle) /* XXX run fancy things here, such as page zeroing... */ ASLOCAL(cpu_switch_found) @@ -159,7 +160,7 @@ ASLOCAL(cpu_switch_found) */ or.u r7, r0, hi16(_C_LABEL(whichqs)) /* reload whichqs */ ld r7, r7, lo16(_C_LABEL(whichqs)) - bcnd eq0, r7, 1b + bcnd eq0, r7, _ASM_LABEL(cpu_switch_idle) /* XXX use ff1, like powerpc... needs *runqueue() adjustments */ xor r6, r6, r6 /* set r6 to 0 */ @@ -225,7 +226,6 @@ ASLOCAL(cpu_switch_found) or r2, r0, r9 or r9, r0, r14 /* restore p saved in r14 */ - #if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) bsr _C_LABEL(sched_unlock_idle) #endif |