Module Name: src
Committed By: nisimura
Date: Wed Dec 22 01:34:18 UTC 2010
Modified Files:
src/sys/arch/mips/mips: locore.S locore_mips1.S mipsX_subr.S
vm_machdep.c
Log Message:
- make sure cpu_switchto() not to touch MIPS_CURLWP register at newlwp
switchframe restoration stage.
- discard MIPS_CURLWP assignments exposed in cpu_lwp_fork() and
cpu_setfunc().
- use plain 'jal' instruction to call lwp_startup().
To generate a diff of this commit:
cvs rdiff -u -r1.172 -r1.173 src/sys/arch/mips/mips/locore.S
cvs rdiff -u -r1.70 -r1.71 src/sys/arch/mips/mips/locore_mips1.S
cvs rdiff -u -r1.36 -r1.37 src/sys/arch/mips/mips/mipsX_subr.S
cvs rdiff -u -r1.130 -r1.131 src/sys/arch/mips/mips/vm_machdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/mips/mips/locore.S
diff -u src/sys/arch/mips/mips/locore.S:1.172 src/sys/arch/mips/mips/locore.S:1.173
--- src/sys/arch/mips/mips/locore.S:1.172 Sun Dec 20 03:40:27 2009
+++ src/sys/arch/mips/mips/locore.S Wed Dec 22 01:34:17 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.172 2009/12/20 03:40:27 rmind Exp $ */
+/* $NetBSD: locore.S,v 1.173 2010/12/22 01:34:17 nisimura Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -247,7 +247,7 @@
REG_L s4, PCB_CONTEXT+SF_REG_S4(a0)
REG_L s5, PCB_CONTEXT+SF_REG_S5(a0)
REG_L s6, PCB_CONTEXT+SF_REG_S6(a0)
- REG_L s7, PCB_CONTEXT+SF_REG_S7(a0)
+ /* REG_L s7, PCB_CONTEXT+SF_REG_S7(a0) don't touch MIPS_CURLWP */
#if defined(__mips_n32) || defined(__mips_n64)
REG_L gp, PCB_CONTEXT+SF_REG_GP(a0)
#endif
Index: src/sys/arch/mips/mips/locore_mips1.S
diff -u src/sys/arch/mips/mips/locore_mips1.S:1.70 src/sys/arch/mips/mips/locore_mips1.S:1.71
--- src/sys/arch/mips/mips/locore_mips1.S:1.70 Thu Nov 25 17:53:24 2010
+++ src/sys/arch/mips/mips/locore_mips1.S Wed Dec 22 01:34:17 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: locore_mips1.S,v 1.70 2010/11/25 17:53:24 matt Exp $ */
+/* $NetBSD: locore_mips1.S,v 1.71 2010/12/22 01:34:17 nisimura Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -1033,10 +1033,9 @@
addu sp, sp, -CALLFRAME_SIZ
# Call lwp_startup(), with args from cpu_switchto()/cpu_setfunc()
- la t0, _C_LABEL(lwp_startup)
move a0, v0
- jal ra, t0
- move a1, s7
+ jal _C_LABEL(lwp_startup)
+ move a1, MIPS_CURLWP
# Call the routine specified by cpu_setfunc()
jal ra, s0
Index: src/sys/arch/mips/mips/mipsX_subr.S
diff -u src/sys/arch/mips/mips/mipsX_subr.S:1.36 src/sys/arch/mips/mips/mipsX_subr.S:1.37
--- src/sys/arch/mips/mips/mipsX_subr.S:1.36 Tue Jun 22 12:42:21 2010
+++ src/sys/arch/mips/mips/mipsX_subr.S Wed Dec 22 01:34:17 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mipsX_subr.S,v 1.36 2010/06/22 12:42:21 simonb Exp $ */
+/* $NetBSD: mipsX_subr.S,v 1.37 2010/12/22 01:34:17 nisimura Exp $ */
/*
* Copyright 2002 Wasabi Systems, Inc.
@@ -2018,10 +2018,9 @@
PTR_ADDU sp, sp, -CALLFRAME_SIZ
# Call lwp_startup(), with args from cpu_switchto()/cpu_setfunc()
- PTR_LA t0, _C_LABEL(lwp_startup)
move a0, v0
- jal ra, t0
- move a1, s7
+ jal _C_LABEL(lwp_startup)
+ move a1, MIPS_CURLWP
# Call the routine specified by cpu_setfunc()
jal ra, s0
Index: src/sys/arch/mips/mips/vm_machdep.c
diff -u src/sys/arch/mips/mips/vm_machdep.c:1.130 src/sys/arch/mips/mips/vm_machdep.c:1.131
--- src/sys/arch/mips/mips/vm_machdep.c:1.130 Mon Dec 14 04:37:02 2009
+++ src/sys/arch/mips/mips/vm_machdep.c Wed Dec 22 01:34:17 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_machdep.c,v 1.130 2009/12/14 04:37:02 matt Exp $ */
+/* $NetBSD: vm_machdep.c,v 1.131 2010/12/22 01:34:17 nisimura Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.130 2009/12/14 04:37:02 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.131 2010/12/22 01:34:17 nisimura Exp $");
#include "opt_ddb.h"
@@ -177,7 +177,6 @@
*/
pcb2->pcb_context.val[_L_S0] = (intptr_t)func; /* S0 */
pcb2->pcb_context.val[_L_S1] = (intptr_t)arg; /* S1 */
- pcb2->pcb_context.val[MIPS_CURLWP_CARD - 16] = (intptr_t)l2; /* S? */
pcb2->pcb_context.val[_L_SP] = (intptr_t)f; /* SP */
pcb2->pcb_context.val[_L_RA] = (intptr_t)lwp_trampoline; /* RA */
#ifdef _LP64
@@ -199,7 +198,6 @@
pcb->pcb_context.val[_L_S0] = (intptr_t)func; /* S0 */
pcb->pcb_context.val[_L_S1] = (intptr_t)arg; /* S1 */
- pcb->pcb_context.val[MIPS_CURLWP_CARD - 16] = (intptr_t)l; /* S? */
pcb->pcb_context.val[_L_SP] = (intptr_t)f; /* SP */
pcb->pcb_context.val[_L_RA] = (intptr_t)setfunc_trampoline; /* RA */
#ifdef _LP64