In exception_return(), if MULTIPROCESSOR, skip software interrupts, ASTs,

and floating point handling if we're not the primary CPU.
This commit is contained in:
thorpej 1998-09-29 07:01:16 +00:00
parent 67fe57924e
commit 30ec5015b1
1 changed files with 16 additions and 2 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.51 1998/09/24 23:28:18 thorpej Exp $ */
/* $NetBSD: locore.s,v 1.52 1998/09/29 07:01:16 thorpej Exp $ */
/*
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@ -34,7 +34,7 @@
#include <machine/asm.h>
__KERNEL_RCSID(0, "$NetBSD: locore.s,v 1.51 1998/09/24 23:28:18 thorpej Exp $");
__KERNEL_RCSID(0, "$NetBSD: locore.s,v 1.52 1998/09/29 07:01:16 thorpej Exp $");
#ifndef EVCNT_COUNTERS
#include <machine/intrcnt.h>
@ -246,6 +246,20 @@ LEAF(exception_return, 1) /* XXX should be NESTED */
br pv, Ler1
Ler1: LDGP(pv)
#if defined(MULTIPROCESSOR)
/* XXX XXX XXX */
/*
* Check the current processor ID. If we're not the primary
* CPU, then just restore registers and bail out.
*/
call_pal PAL_OSF1_whami
lda t0, hwrpb
ldq t0, 0(t0)
ldq t1, RPB_PRIMARY_CPU_ID(t0)
cmpeq t1, v0, t0
beq t0, Lrestoreregs /* == 0: bail out now */
#endif
ldq s1, (FRAME_PS * 8)(sp) /* get the saved PS */
and s1, ALPHA_PSL_IPL_MASK, t0 /* look at the saved IPL */
bne t0, Lrestoreregs /* != 0: can't do AST or SIR */