diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2006-11-18 22:49:44 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2006-11-18 22:49:44 +0000 |
commit | 93b36526335612f21cd26108ef85345caae50e9e (patch) | |
tree | ce82ad3e3c3e94e68f080567b1caa4151d96a270 /sys/arch/m88k | |
parent | 5fc66cc773d89e98cff2ba9fcef664937d235be0 (diff) |
Stop saving and restoring the current ipl in the pcb when switching processes,
since we know we are at splsched().
Diffstat (limited to 'sys/arch/m88k')
-rw-r--r-- | sys/arch/m88k/include/pcb.h | 4 | ||||
-rw-r--r-- | sys/arch/m88k/m88k/genassym.cf | 5 | ||||
-rw-r--r-- | sys/arch/m88k/m88k/process.S | 38 |
3 files changed, 15 insertions, 32 deletions
diff --git a/sys/arch/m88k/include/pcb.h b/sys/arch/m88k/include/pcb.h index 2ebb31accf0..e12b14cea62 100644 --- a/sys/arch/m88k/include/pcb.h +++ b/sys/arch/m88k/include/pcb.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pcb.h,v 1.2 2005/12/03 14:30:05 miod Exp $ */ +/* $OpenBSD: pcb.h,v 1.3 2006/11/18 22:49:40 miod Exp $ */ /* * Copyright (c) 1996 Nivas Madhur * Mach Operating System @@ -49,7 +49,7 @@ struct m88100_pcb { unsigned pcb_pc; /* address to return */ - unsigned pcb_ipl; + unsigned :32; unsigned pcb_r14; unsigned pcb_r15; unsigned pcb_r16; diff --git a/sys/arch/m88k/m88k/genassym.cf b/sys/arch/m88k/m88k/genassym.cf index 98ce27b802a..3da51a297c8 100644 --- a/sys/arch/m88k/m88k/genassym.cf +++ b/sys/arch/m88k/m88k/genassym.cf @@ -1,4 +1,4 @@ -# $OpenBSD: genassym.cf,v 1.6 2006/04/17 16:08:01 miod Exp $ +# $OpenBSD: genassym.cf,v 1.7 2006/11/18 22:49:43 miod Exp $ # # Copyright (c) 1982, 1990 The Regents of the University of California. # All rights reserved. @@ -28,7 +28,7 @@ # SUCH DAMAGE. # # @(#)genassym.c 7.8 (Berkeley) 5/7/91 -# $Id: genassym.cf,v 1.6 2006/04/17 16:08:01 miod Exp $ +# $Id: genassym.cf,v 1.7 2006/11/18 22:49:43 miod Exp $ # include <sys/param.h> @@ -140,7 +140,6 @@ define SIZEOF_EF sizeof(struct trapframe) # more (machine-dependent) pcb fields struct m88100_pcb member pcb_pc -member pcb_ipl member pcb_r14 member pcb_r15 member pcb_r16 diff --git a/sys/arch/m88k/m88k/process.S b/sys/arch/m88k/m88k/process.S index 7773baf15d2..fac510c3dd5 100644 --- a/sys/arch/m88k/m88k/process.S +++ b/sys/arch/m88k/m88k/process.S @@ -1,4 +1,4 @@ -/* $OpenBSD: process.S,v 1.13 2005/12/11 21:45:30 miod Exp $ */ +/* $OpenBSD: process.S,v 1.14 2006/11/18 22:49:43 miod Exp $ */ /* * Copyright (c) 1996 Nivas Madhur * All rights reserved. @@ -87,7 +87,7 @@ ENTRY(switch_exit) * cpu_switch(), after the context save since we do not need * to save anything. */ - bsr _ASM_LABEL(cpu_switch_search) + br _ASM_LABEL(cpu_switch_search) /* * void cpu_switch(struct proc *p) @@ -256,18 +256,16 @@ ASLOCAL(cpu_switch_found) ld r27, r10, PCB_R27 ld r28, r10, PCB_R28 ld r29, r10, PCB_R29 - or r14, r10, r0 /* preserve curpcb in a register... */ - bsr.n _C_LABEL(setipl) - ld r2, r10, PCB_IPL /* restore interrupt mask */ - ld r1, r14, PCB_PC - ld r30, r14, PCB_R30 /* restore frame pointer & stack */ - ld r31, r14, PCB_SP + ld r1, r10, PCB_PC + ld r30, r10, PCB_R30 /* restore frame pointer & stack */ + ld r31, r10, PCB_SP #if defined(MULTIPROCESSOR) || defined(LOCKDEBUG) br.n _C_LABEL(sched_unlock_idle) + ld r14, r10, PCB_R14 #else jmp.n r1 + ld r14, r10, PCB_R14 #endif - ld r14, r14, PCB_R14 /* * savectx(pcb) @@ -299,24 +297,10 @@ ASLOCAL(__savectx) st r31, r2, PCB_SP /* - * Get the current spl. - * We need to save r1 on the stack because we don't know if we were - * called as savectx or __savectx. - */ - subu r31, r31, 16 /* allocate stack for r1 and args */ - st r1, r31, 0 - bsr.n _C_LABEL(getipl) /* get the current interrupt mask */ - or r14, r0, r2 - st r2, r14, PCB_IPL /* save interrupt mask */ - ld r1, r31, 0 /* recover return address */ - addu r31, r31, 16 /* put stack pointer back */ - - /* * Save FP state. */ - fldcr r2, fcr62 - fldcr r3, fcr63 - st r2, r14, PCB_FCR62 - st r3, r14, PCB_FCR63 + fldcr r4, fcr62 + fldcr r5, fcr63 + st r4, r2, PCB_FCR62 jmp.n r1 - ld r14, r14, PCB_R14 /* preserve r14 */ + st r5, r2, PCB_FCR63 |