Module Name: src Committed By: snj Date: Tue Jun 9 17:38:39 UTC 2009
Modified Files: src/sys/arch/alpha/alpha [netbsd-5]: locore.s vm_machdep.c src/sys/arch/alpha/include [netbsd-5]: alpha.h Log Message: Pull up following revision(s) (requested by martin in ticket #798): sys/arch/alpha/alpha/locore.s: revision 1.114 sys/arch/alpha/alpha/vm_machdep.c: revision 1.100 sys/arch/alpha/include/alpha.h: revision 1.24 Do not use lwp_trampoline for cpu_setfunc, but a simplified setfunc_trampoline that does not call lwp_startup() instead. To generate a diff of this commit: cvs rdiff -u -r1.113 -r1.113.10.1 src/sys/arch/alpha/alpha/locore.s cvs rdiff -u -r1.96 -r1.96.30.1 src/sys/arch/alpha/alpha/vm_machdep.c cvs rdiff -u -r1.23 -r1.23.28.1 src/sys/arch/alpha/include/alpha.h 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/alpha/alpha/locore.s diff -u src/sys/arch/alpha/alpha/locore.s:1.113 src/sys/arch/alpha/alpha/locore.s:1.113.10.1 --- src/sys/arch/alpha/alpha/locore.s:1.113 Mon Apr 28 20:23:10 2008 +++ src/sys/arch/alpha/alpha/locore.s Tue Jun 9 17:38:38 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.s,v 1.113 2008/04/28 20:23:10 martin Exp $ */ +/* $NetBSD: locore.s,v 1.113.10.1 2009/06/09 17:38:38 snj Exp $ */ /*- * Copyright (c) 1999, 2000 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include <machine/asm.h> -__KERNEL_RCSID(0, "$NetBSD: locore.s,v 1.113 2008/04/28 20:23:10 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: locore.s,v 1.113.10.1 2009/06/09 17:38:38 snj Exp $"); #include "assym.h" @@ -748,6 +748,16 @@ jmp zero, (pv) END(lwp_trampoline) +/* + * Simplified version of above: don't call lwp_startup() + */ +LEAF_NOPROFILE(setfunc_trampoline, 0) + mov s0, pv + mov s1, ra + mov s2, a0 + jmp zero, (pv) + END(setfunc_trampoline) + /**************************************************************************/ /* Index: src/sys/arch/alpha/alpha/vm_machdep.c diff -u src/sys/arch/alpha/alpha/vm_machdep.c:1.96 src/sys/arch/alpha/alpha/vm_machdep.c:1.96.30.1 --- src/sys/arch/alpha/alpha/vm_machdep.c:1.96 Wed Oct 17 19:52:56 2007 +++ src/sys/arch/alpha/alpha/vm_machdep.c Tue Jun 9 17:38:39 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.96 2007/10/17 19:52:56 garbled Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.96.30.1 2009/06/09 17:38:39 snj Exp $ */ /* * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University. @@ -29,7 +29,7 @@ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.96 2007/10/17 19:52:56 garbled Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.96.30.1 2009/06/09 17:38:39 snj Exp $"); #include "opt_coredump.h" #include <sys/param.h> @@ -129,6 +129,7 @@ void (*func)(void *), void *arg) { struct user *up = l2->l_addr; + extern void lwp_trampoline(void); l2->l_md.md_tf = l1->l_md.md_tf; l2->l_md.md_flags = l1->l_md.md_flags & (MDP_FPUSED | MDP_FP_C); @@ -194,7 +195,19 @@ l2tf->tf_regs[FRAME_A3] = 0; /* no error */ l2tf->tf_regs[FRAME_A4] = 1; /* is child */ - cpu_setfunc(l2, func, arg); + up = l2->l_addr; + up->u_pcb.pcb_hw.apcb_ksp = + (u_int64_t)l2->l_md.md_tf; + up->u_pcb.pcb_context[0] = + (u_int64_t)func; /* s0: pc */ + up->u_pcb.pcb_context[1] = + (u_int64_t)exception_return; /* s1: ra */ + up->u_pcb.pcb_context[2] = + (u_int64_t)arg; /* s2: arg */ + up->u_pcb.pcb_context[3] = + (u_int64_t)l2; /* s3: lwp */ + up->u_pcb.pcb_context[7] = + (u_int64_t)lwp_trampoline; /* ra: assembly magic */ } } @@ -205,6 +218,7 @@ void *arg; { struct user *up = l->l_addr; + extern void setfunc_trampoline(void); up->u_pcb.pcb_hw.apcb_ksp = (u_int64_t)l->l_md.md_tf; @@ -214,10 +228,8 @@ (u_int64_t)exception_return; /* s1: ra */ up->u_pcb.pcb_context[2] = (u_int64_t)arg; /* s2: arg */ - up->u_pcb.pcb_context[3] = - (u_int64_t)l; /* s3: lwp */ up->u_pcb.pcb_context[7] = - (u_int64_t)lwp_trampoline; /* ra: assembly magic */ + (u_int64_t)setfunc_trampoline; /* ra: assembly magic */ } /* Index: src/sys/arch/alpha/include/alpha.h diff -u src/sys/arch/alpha/include/alpha.h:1.23 src/sys/arch/alpha/include/alpha.h:1.23.28.1 --- src/sys/arch/alpha/include/alpha.h:1.23 Wed Nov 28 17:40:03 2007 +++ src/sys/arch/alpha/include/alpha.h Tue Jun 9 17:38:39 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: alpha.h,v 1.23 2007/11/28 17:40:03 ad Exp $ */ +/* $NetBSD: alpha.h,v 1.23.28.1 2009/06/09 17:38:39 snj Exp $ */ /* * Copyright (c) 1982, 1990, 1993 @@ -139,7 +139,6 @@ void regdump(struct trapframe *); void regtoframe(const struct reg *, struct trapframe *); void savectx(struct pcb *); -void lwp_trampoline(void); /* MAGIC */ void trap(unsigned long, unsigned long, unsigned long, unsigned long, struct trapframe *); void trap_init(void);