Module Name:    src
Committed By:   snj
Date:           Fri Jun  5 18:34:47 UTC 2009

Modified Files:
        src/sys/arch/m68k/include [netbsd-5]: m68k.h
        src/sys/arch/m68k/m68k [netbsd-5]: switch_subr.s vm_machdep.c

Log Message:
Pull up following revision(s) (requested by martin in ticket #787):
        sys/arch/m68k/include/m68k.h: revision 1.14
        sys/arch/m68k/m68k/switch_subr.s: revision 1.22
        sys/arch/m68k/m68k/vm_machdep.c: revision 1.28
Do not use lwp_trampoline for cpu_setfunc, we do not want to call
lwp_startup() after a setfunc. Grow a simplified setfunc_trampoline
instead.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.13.30.1 src/sys/arch/m68k/include/m68k.h
cvs rdiff -u -r1.21 -r1.21.30.1 src/sys/arch/m68k/m68k/switch_subr.s
cvs rdiff -u -r1.26 -r1.26.30.1 src/sys/arch/m68k/m68k/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/m68k/include/m68k.h
diff -u src/sys/arch/m68k/include/m68k.h:1.13 src/sys/arch/m68k/include/m68k.h:1.13.30.1
--- src/sys/arch/m68k/include/m68k.h:1.13	Wed Oct 17 19:55:05 2007
+++ src/sys/arch/m68k/include/m68k.h	Fri Jun  5 18:34:46 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: m68k.h,v 1.13 2007/10/17 19:55:05 garbled Exp $	*/
+/*	$NetBSD: m68k.h,v 1.13.30.1 2009/06/05 18:34:46 snj Exp $	*/
 
 /*
  * Copyright (c) 1982, 1990, 1993
@@ -144,7 +144,6 @@
 int 	getsfc(void);
 
 /* switch_subr.s */
-void	lwp_trampoline(void);
 void	savectx(struct pcb *);
 
 /* w16copy.s */

Index: src/sys/arch/m68k/m68k/switch_subr.s
diff -u src/sys/arch/m68k/m68k/switch_subr.s:1.21 src/sys/arch/m68k/m68k/switch_subr.s:1.21.30.1
--- src/sys/arch/m68k/m68k/switch_subr.s:1.21	Wed Oct 17 19:55:12 2007
+++ src/sys/arch/m68k/m68k/switch_subr.s	Fri Jun  5 18:34:47 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: switch_subr.s,v 1.21 2007/10/17 19:55:12 garbled Exp $	*/
+/*	$NetBSD: switch_subr.s,v 1.21.30.1 2009/06/05 18:34:47 snj Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation.
@@ -397,4 +397,17 @@
 	addql	#8,%sp			| toss SP and stack adjust
 	jra	_ASM_LABEL(rei)		| and return
 
+/*
+ * Very similar to lwp_trampoline, but do not call lwp_startup
+ */
+ENTRY_NOPROFILE(setfunc_trampoline)
+	movl	%a3,%...@-		| push function arg
+	jbsr	%a2@			| call function
+	addql	#4,%sp			| pop arg
+	movl	%sp@(FR_SP),%a0		| grab and load
+	movl	%a0,%usp		|   user SP
+	moveml	%...@+,#0x7FFF		| restore most user regs
+	addql	#8,%sp			| toss SP and stack adjust
+	jra	_ASM_LABEL(rei)		| and return
+
 

Index: src/sys/arch/m68k/m68k/vm_machdep.c
diff -u src/sys/arch/m68k/m68k/vm_machdep.c:1.26 src/sys/arch/m68k/m68k/vm_machdep.c:1.26.30.1
--- src/sys/arch/m68k/m68k/vm_machdep.c:1.26	Wed Oct 17 19:55:12 2007
+++ src/sys/arch/m68k/m68k/vm_machdep.c	Fri Jun  5 18:34:47 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm_machdep.c,v 1.26 2007/10/17 19:55:12 garbled Exp $	*/
+/*	$NetBSD: vm_machdep.c,v 1.26.30.1 2009/06/05 18:34:47 snj Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.26 2007/10/17 19:55:12 garbled Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.26.30.1 2009/06/05 18:34:47 snj Exp $");
 
 #include "opt_coredump.h"
 
@@ -131,6 +131,7 @@
 	struct trapframe *tf;
 	struct switchframe *sf;
 	extern struct pcb *curpcb;
+	extern void lwp_trampoline(void);
 
 	l2->l_md.md_flags = l1->l_md.md_flags;
 
@@ -173,8 +174,9 @@
 	struct pcb *pcb = &l->l_addr->u_pcb;
 	struct trapframe *tf = (struct trapframe *)l->l_md.md_regs;
 	struct switchframe *sf = (struct switchframe *)tf - 1;
+	extern void setfunc_trampoline(void);
 
-	sf->sf_pc = (u_int)lwp_trampoline;
+	sf->sf_pc = (u_int)setfunc_trampoline;
 	pcb->pcb_regs[6] = (int)func;		/* A2 */
 	pcb->pcb_regs[7] = (int)arg;		/* A3 */
 	pcb->pcb_regs[11] = (int)sf;		/* SSP */

Reply via email to