Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 May 2001 08:32:06 +0300
From:      Valentin Nechayev <netch@iv.nn.kiev.ua>
To:        Rohit Rakshe <rakshe@cs.umn.edu>
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: FPU exception, kernel panic
Message-ID:  <20010507083206.A511@iv.nn.kiev.ua>
In-Reply-To: <Pine.GSO.4.31.0105061711210.15916-100000@melchizedek.cs.umn.edu>; from rakshe@cs.umn.edu on Sun, May 06, 2001 at 05:14:08PM -0500
References:  <Pine.GSO.4.31.0105051400070.16637-100000@mercury.cs.umn.edu> <Pine.GSO.4.31.0105061711210.15916-100000@melchizedek.cs.umn.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
 Sun, May 06, 2001 at 17:14:08, rakshe (Rohit Rakshe) wrote about "Re: FPU exception, kernel panic": 

(I cannot even guarantree 50% this is the same problem, but...)
There were some reports in current@ about incorrect usage of i586_bzero()
which uses FPU for zero-filling. It generated random kernel panics mainly
on K6-2, also on P5-MMX and similars. You can try to disable such bzero,
but IMHO it is reasonable to upgrade to 4.3-RELEASE (RELENG_4_3) first.

> I guessed I asked too much. Can someone please tell me just this:
> 
> "How do I translate 48 bit address (segment descriptor:offset) to a
> linear address which gdb can understand ?"
> >
> > I modified some TCP and UDP code in FreeBSD 4.1 and suddenly started
> > getting (almost repeatable) kernel panics. This is how it looks like
> > from remote gdb:
> >
> > (kgdb) bt
> > #0  0xc0192e58 in panic (fmt=0xc035c076 "npxintr from nowhere") at
> > ../../kern/kern_shutdown.c:550
> > #1  0xc0303c6c in npx_intr (dummy=0x0) at ../../i386/isa/npx.c:721
> > #2  0xc02e1052 in Xfpu ()
> > #3  0xc019824d in softclock () at ../../kern/kern_timeout.c:131
> > .
> > .
> > .
> > (kgdb) list
> > 126                                     } else {
> > 127                                             c->c_flags =
> > 128                                                 (c->c_flags &
> > ~CALLOUT_PENDING);
> > 129                                     }
> > 130                                     splx(s);
> > 131                                     c_func(c_arg);
> > 132                                     s = splhigh();
> > 133                                     steps = 0;
> > 134                                     c = nextsoftcheck;
> > 135                             }
> > .
> > .
> > .
> > (kgdb)
> > #1  0xc0303c6c in npx_intr (dummy=0x0) at ../../i386/isa/npx.c:721
> > 721                     panic("npxintr from nowhere");
> > (kgdb) p npxproc
> > $5 = 0
> > (kgdb) p npx_exists
> > $6 = 1 '\001'
> > .
> > .
> > .
> > (kgdb) info all-registers
> > eax            0x12     18
> > ecx            0xc03a60a0       -1069916000
> > edx            0x400000 4194304
> > ebx            0xcbc56540       -876255936
> > esp            0xc0361354       0xc0361354
> > ebp            0xc0361410       0xc0361410
> > esi            0x400000 4194304
> > edi            0x400000 4194304
> > eip            0xc019824d       0xc019824d
> > eflags         0x346    838
> > cs             0x8      8
> > ss             0x10     16
> > ds             0x400010 4194320
> > es             0x10     16
> > fs             0x0      0
> > gs             0x0      0
> > (kgdb) info float
> > status 0xc8f5: exceptions: INVALID DIVZ UNDERF LOS FPSTACK; flags: 1000;
> > top 1
> > control 0x6620: compute to 53 bits; round DOWN; mask: LOS;
> > warning: reserved bits on: 0x6000
> >
> > last instruction: opcode 0x2825; pc 0x71a4:0x2824c316; operand
> > 0xf800:0x8176640
> >  regno     tag  msb              lsb  value
> > %st(7)    valid 0000000008179a802825  Denormal (0 as a double)
> > %st(6)    valid 71a42824c31600000000  Unnormal (NaN)
> > %st(5)    valid 08176640282571a42824  Unnormal (NaN)
> > %st(4)    valid c8910818f9380818f800  Unnormal (NaN)
> > %st(3)    valid 282571a42824c316bfbf  Unnormal (NaN)
> > %st(2)    valid e82808176620089c3000  Unnormal (NaN)
> > %st(1)    valid 00000032000000010001  Denormal (0 as a double)
> > %st(0) => valid 0000000000240818f800  Denormal (0 as a double)
> >
> >
> > So, this means that there was a FPU exception in kernel, right ?
> >
> > 1. The code which I added in kernel does not use any floats. So I am
> > wondering why this problem should happen at all.
> >
> > 2. pc register in FPU should give address of the instruction which caused
> > this exception, right ?
> >
> > 3. If yes, how do I translate this 48 bit address in a linear address
> > which gdb can understand ?


/netch

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010507083206.A511>