Module Name: src
Committed By: snj
Date: Sat Jan 9 01:43:51 UTC 2010
Modified Files:
src/sys/arch/sparc/include [netbsd-5]: cpu.h
src/sys/arch/sparc/sparc [netbsd-5]: locore.s vm_machdep.c
Log Message:
Pull up following revision(s) (requested by mrg in ticket #1223):
sys/arch/sparc/include/cpu.h: revision 1.86
sys/arch/sparc/sparc/locore.s: revision 1.246
sys/arch/sparc/sparc/vm_machdep.c: revision 1.100
fix up cpu_setfunc() as noted by uwe:
- don't call lwp_startup for cpu_setfunc() users
- introduce lwp_setfunc_trampoline instead
- no need to set the "new" lwp for setfunc
To generate a diff of this commit:
cvs rdiff -u -r1.84 -r1.84.14.1 src/sys/arch/sparc/include/cpu.h
cvs rdiff -u -r1.244 -r1.244.8.1 src/sys/arch/sparc/sparc/locore.s
cvs rdiff -u -r1.95.4.1 -r1.95.4.2 src/sys/arch/sparc/sparc/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/sparc/include/cpu.h
diff -u src/sys/arch/sparc/include/cpu.h:1.84 src/sys/arch/sparc/include/cpu.h:1.84.14.1
--- src/sys/arch/sparc/include/cpu.h:1.84 Wed Feb 27 18:26:16 2008
+++ src/sys/arch/sparc/include/cpu.h Sat Jan 9 01:43:51 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.h,v 1.84 2008/02/27 18:26:16 xtraeme Exp $ */
+/* $NetBSD: cpu.h,v 1.84.14.1 2010/01/09 01:43:51 snj Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -197,6 +197,7 @@
void write_all_windows(void);
void write_user_windows(void);
void lwp_trampoline(void);
+void lwp_setfunc_trampoline(void);
struct pcb;
void snapshot(struct pcb *);
struct frame *getfp(void);
Index: src/sys/arch/sparc/sparc/locore.s
diff -u src/sys/arch/sparc/sparc/locore.s:1.244 src/sys/arch/sparc/sparc/locore.s:1.244.8.1
--- src/sys/arch/sparc/sparc/locore.s:1.244 Sun May 25 15:56:12 2008
+++ src/sys/arch/sparc/sparc/locore.s Sat Jan 9 01:43:51 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.244 2008/05/25 15:56:12 chs Exp $ */
+/* $NetBSD: locore.s,v 1.244.8.1 2010/01/09 01:43:51 snj Exp $ */
/*
* Copyright (c) 1996 Paul Kranenburg
@@ -5044,6 +5044,9 @@
*
* If were setting up a kernel thread, the function *(%l0) will not
* return.
+ *
+ * For KERN_SA applications, we provide an alternate entry point for
+ * cpu_setfunc() to use.
*/
ENTRY(lwp_trampoline)
/*
@@ -5056,6 +5059,7 @@
call lwp_startup
mov %l2, %o1
+_ENTRY(lwp_setfunc_trampoline)
call %l0
mov %l1, %o0
Index: src/sys/arch/sparc/sparc/vm_machdep.c
diff -u src/sys/arch/sparc/sparc/vm_machdep.c:1.95.4.1 src/sys/arch/sparc/sparc/vm_machdep.c:1.95.4.2
--- src/sys/arch/sparc/sparc/vm_machdep.c:1.95.4.1 Sat Jan 9 01:41:57 2010
+++ src/sys/arch/sparc/sparc/vm_machdep.c Sat Jan 9 01:43:51 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_machdep.c,v 1.95.4.1 2010/01/09 01:41:57 snj Exp $ */
+/* $NetBSD: vm_machdep.c,v 1.95.4.2 2010/01/09 01:43:51 snj Exp $ */
/*
* Copyright (c) 1996
@@ -49,7 +49,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.95.4.1 2010/01/09 01:41:57 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.95.4.2 2010/01/09 01:43:51 snj Exp $");
#include "opt_multiprocessor.h"
#include "opt_coredump.h"
@@ -276,8 +276,15 @@
/* Construct kernel frame to return to in cpu_switch() */
rp = (struct rwindow *)((u_int)npcb + TOPFRAMEOFF);
+ /**rp = *(struct rwindow *)((u_int)opcb + TOPFRAMEOFF);*/
+ rp->rw_local[0] = (int)func; /* Function to call */
+ rp->rw_local[1] = (int)arg; /* and its argument */
+ rp->rw_local[2] = (int)l2; /* new LWP */
- cpu_setfunc(l2, func, arg);
+ npcb->pcb_pc = (int)lwp_trampoline - 8;
+ npcb->pcb_sp = (int)rp;
+ npcb->pcb_psr &= ~PSR_CWP; /* Run in window #0 */
+ npcb->pcb_wim = 1; /* Fence at window #1 */
}
/*
@@ -330,9 +337,8 @@
rp = (struct rwindow *)((u_int)pcb + TOPFRAMEOFF);
rp->rw_local[0] = (int)func; /* Function to call */
rp->rw_local[1] = (int)arg; /* and its argument */
- rp->rw_local[2] = (int)l; /* new lwp */
- pcb->pcb_pc = (int)lwp_trampoline - 8;
+ pcb->pcb_pc = (int)lwp_setfunc_trampoline - 8;
pcb->pcb_sp = (int)rp;
pcb->pcb_psr &= ~PSR_CWP; /* Run in window #0 */
pcb->pcb_wim = 1; /* Fence at window #1 */