Module Name:    src
Committed By:   scole
Date:           Fri Jan 18 18:03:06 UTC 2019

Modified Files:
        src/sys/arch/ia64/ia64: vm_machdep.c

Log Message:
hopefully fix deadlock issue in cpu_switchto.  pointed out by <mrg> (Thanks!)


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/ia64/ia64/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/ia64/ia64/vm_machdep.c
diff -u src/sys/arch/ia64/ia64/vm_machdep.c:1.15 src/sys/arch/ia64/ia64/vm_machdep.c:1.16
--- src/sys/arch/ia64/ia64/vm_machdep.c:1.15	Wed Nov 14 21:10:59 2018
+++ src/sys/arch/ia64/ia64/vm_machdep.c	Fri Jan 18 18:03:06 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm_machdep.c,v 1.15 2018/11/14 21:10:59 scole Exp $	*/
+/*	$NetBSD: vm_machdep.c,v 1.16 2019/01/18 18:03:06 scole Exp $	*/
 
 /*
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -91,8 +91,9 @@ cpu_switchto(lwp_t *oldlwp, lwp_t *newlw
 		KASSERT(oldlwp == l);
 		swapctx(oldpcb, newpcb);
 	}
-	
-	return (oldlwp);
+
+	/* return oldlwp for the original thread that called cpu_switchto */
+	return ((lwp_t *)reg9);
 }
 
 /*
@@ -189,13 +190,12 @@ cpu_lwp_fork(struct lwp *l1, struct lwp 
 		tf->tf_scratch.gr10 = 0;
 	}
 
-	tf->tf_scratch.gr2 = (unsigned long)FDESC_FUNC(func);
-	tf->tf_scratch.gr3 = (unsigned long)arg;
-
-	pcb2->pcb_special.sp = ua2 + UAREA_SP_OFFSET;
-	pcb2->pcb_special.rp = (unsigned long)FDESC_FUNC(lwp_trampoline);
 	pcb2->pcb_special.bspstore = ua2 + UAREA_BSPSTORE_OFFSET + ndirty;
 	pcb2->pcb_special.pfs = 0;
+	pcb2->pcb_special.sp = ua2 + UAREA_SP_OFFSET;
+	pcb2->pcb_special.rp = (unsigned long)FDESC_FUNC(lwp_trampoline);
+	tf->tf_scratch.gr2 = (unsigned long)FDESC_FUNC(func);
+	tf->tf_scratch.gr3 = (unsigned long)arg;
 
 	return;
 }

Reply via email to