DragonFly BSD
DragonFly bugs List (threaded) for 2003-09
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re2: panic: cpu_switch: not SRUN


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 15 Sep 2003 19:34:18 -0700 (PDT)

:I've been getting these panics under moderate load,
:
:panic: cpu_switch: not SRUN
:-- 
:   David P. Reese, Jr.                                     daver@xxxxxxxxxxxx

    Here.  Before you waste time trying to get a core dump, please try this
    patch.  I believe what is happening is that a user program is calling
    exit1() and an interrupt is preempting it just after exit1() sets
    p_stat to SZOMB.  This is perfectly legal to do and the DIAGNOSTIC code
    is improperly panicing.  

    That's my guess, anyway.  If the patch solves the problem then we will
    know that is what it was.

						-Matt

Index: i386/i386/genassym.c
===================================================================
RCS file: /cvs/src/sys/i386/i386/genassym.c,v
retrieving revision 1.28
diff -u -r1.28 genassym.c
--- i386/i386/genassym.c	7 Aug 2003 21:17:22 -0000	1.28
+++ i386/i386/genassym.c	16 Sep 2003 02:31:13 -0000
@@ -104,6 +104,7 @@
 
 ASSYM(SSLEEP, SSLEEP);
 ASSYM(SRUN, SRUN);
+ASSYM(SZOMB, SZOMB);
 ASSYM(V_TRAP, offsetof(struct vmmeter, v_trap));
 ASSYM(V_SYSCALL, offsetof(struct vmmeter, v_syscall));
 ASSYM(V_SENDSYS, offsetof(struct vmmeter, v_sendsys));
Index: i386/i386/swtch.s
===================================================================
RCS file: /cvs/src/sys/i386/i386/swtch.s,v
retrieving revision 1.26
diff -u -r1.26 swtch.s
--- i386/i386/swtch.s	7 Aug 2003 21:17:22 -0000	1.26
+++ i386/i386/swtch.s	16 Sep 2003 02:31:52 -0000
@@ -228,7 +228,10 @@
 	movl	TD_PROC(%eax),%ecx
 #ifdef	DIAGNOSTIC
 	cmpb	$SRUN,P_STAT(%ecx)
+	je	1f
+	cmpb	$SZOMB,P_STAT(%ecx)
 	jne	badsw2
+1:
 #endif
 
 #if defined(SWTCH_OPTIM_STATS)



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]