DragonFly bugs List (threaded) for 2006-04
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]
Re: crashme panic
: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@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));
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]