crashme panic

Matthew Dillon dillon at apollo.backplane.com
Sun Apr 2 12:13:40 PDT 2006


:Sorry,
:
:I should have quoted them directly. I ran it with the default values 
:from the manual page, adding only verbose debugging output:
:
:dim# crashme +2000 666 100 1:00:00 5
:
:Regards,
:Sascha
:
:-- 
:http://yoyodyne.ath.cx

    That did it. 

    I think I've figured it out.  The floating point exception is installed
    as a trap-gate, which leaves interrupts enabled.  If an interrupt occurs
    just as the FP exception occurs it can change the state of the FPU
    and confuse npx_intr().

    Try this patch out and tell me if you still get the panic.  It isn't 
    the 'real' fix, but it will tell us if that is the problem.  The
    crash does not seem to occur with the patch.

    The real fix is going to be simply to make npx_intr() and npxdna()
    handle each other's cases as well as their own, and then get rid of
    the assertion.  I think I also need to have them go into a critical 
    section.

					-Matt
					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>

Index: i386/machdep.c
===================================================================
RCS file: /cvs/src/sys/i386/i386/machdep.c,v
retrieving revision 1.88
diff -u -r1.88 machdep.c
--- i386/machdep.c	24 Mar 2006 18:35:32 -0000	1.88
+++ i386/machdep.c	2 Apr 2006 19:01:12 -0000
@@ -1912,7 +1912,7 @@
 	setidt(4, &IDTVEC(ofl),  SDT_SYS386TGT, SEL_UPL, GSEL(GCODE_SEL, SEL_KPL));
 	setidt(5, &IDTVEC(bnd),  SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 	setidt(6, &IDTVEC(ill),  SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
-	setidt(7, &IDTVEC(dna),  SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
+	setidt(7, &IDTVEC(dna),  SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 	setidt(8, 0,  SDT_SYSTASKGT, SEL_KPL, GSEL(GPANIC_SEL, SEL_KPL));
 	setidt(9, &IDTVEC(fpusegm),  SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 	setidt(10, &IDTVEC(tss),  SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
@@ -1921,7 +1921,7 @@
 	setidt(13, &IDTVEC(prot),  SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 	setidt(14, &IDTVEC(page),  SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 	setidt(15, &IDTVEC(rsvd0),  SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
-	setidt(16, &IDTVEC(fpu),  SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
+	setidt(16, &IDTVEC(fpu),  SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 	setidt(17, &IDTVEC(align), SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 	setidt(18, &IDTVEC(mchk),  SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
 	setidt(19, &IDTVEC(xmm), SDT_SYS386TGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));





More information about the Bugs mailing list