Module Name: src
Committed By: bouyer
Date: Fri Dec 10 22:14:57 UTC 2010
Modified Files:
src/sys/arch/i386/i386 [netbsd-4]: locore.S
Log Message:
Apply patch, requested by dholland in ticket #1410:
sys/arch/i386/i386/locore.S: patch
In cpu_switch, avoid flipping interrupts on while holding the
scheduler lock. Doing so can cause locking against oneself via
endtsleep(). Fixes PR kern/38183, where the overt symptom was
that LOCKDEBUG + INSTALL_LARGE would panic during boot.
Should fix PR 38183.
To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.44.2.1 src/sys/arch/i386/i386/locore.S
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/i386/i386/locore.S
diff -u src/sys/arch/i386/i386/locore.S:1.44 src/sys/arch/i386/i386/locore.S:1.44.2.1
--- src/sys/arch/i386/i386/locore.S:1.44 Wed Oct 25 13:56:15 2006
+++ src/sys/arch/i386/i386/locore.S Fri Dec 10 22:14:57 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.44 2006/10/25 13:56:15 jmmv Exp $ */
+/* $NetBSD: locore.S,v 1.44.2.1 2010/12/10 22:14:57 bouyer Exp $ */
/*-
* Copyright (c) 1998, 2000, 2004 The NetBSD Foundation, Inc.
@@ -920,7 +920,7 @@
* we're running at splhigh(), but it's otherwise okay to take
* interrupts here.
*/
- sti
+ /*sti -- no it isn't! */
leal _C_LABEL(sched_qs)(,%ebx,8),%eax # select q
movl L_FORW(%eax),%edi # unlink from front of process q
@@ -1049,7 +1049,7 @@
SET_CURPCB(%esi)
/* Interrupts are okay again. */
- sti
+ /*sti -- nope, not yet! */
/*
* Check for restartable atomic sequences (RAS)
@@ -1065,6 +1065,7 @@
#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG)
call _C_LABEL(sched_unlock_idle)
#endif
+ sti /* NOW we can do this, after releasing sched_lock */
cmpl $0,CPUVAR(IPENDING)
jz 3f
pushl $IPL_NONE # spl0()
@@ -1129,7 +1130,7 @@
* We're running at splhigh(), but it's otherwise okay to take
* interrupts here.
*/
- sti
+ /*sti -- no it isn't! */
/* Jump into the middle of cpu_switch */
xorl %eax,%eax