DragonFly BSD
DragonFly kernel List (threaded) for 2005-01
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: Ctrl-Alt-ESC during boot

From: Chuck Tuffli <chuck_tuffli@xxxxxxxxxxx>
Date: Thu, 27 Jan 2005 14:43:24 -0800

To set this up properly, this is running with HEAD as of yesterday (Jan 26th) on an Asus P5GD1 motherboard (Pentium 4, based on the Intel 915G chipset). The kernel config is GENERIC plus support for gdb. Also, this is booting off of a live-cd. Note that the same CD boots an older Intel 815 based machine just fine. The registers and memory values on the machine that boots fine are (almost) identical to what is shown below.

Matthew Dillon wrote:
    Inside spl0 means that a pending interrupt unmasked by spl0 is being
    run and is causing the hang.  Presumably it is related to the suspect

    I recommend adding some diagnostic printf()'s to the interrupt service
    routines for the device(s) in question, it might help you better diagnose
    where the problem is occuring.

At the point of the hang, the system hasn't finished booting the OS. The hang occurs in

(kgdb) bt
#0  spl0 () at /usr/home/ctuffli/dfly-cvs/src/sys/i386/isa/ipl_funcs.c:177
#1  0xc03f2715 in configure (dummy=0x0)
    at /usr/home/ctuffli/dfly-cvs/src/sys/i386/i386/autoconf.c:176
#2  0xc024264c in mi_startup ()
    at /usr/home/ctuffli/dfly-cvs/src/sys/kern/init_main.c:207

on assignment of

td->td_cpl = 0;

where td = gd->mi.gd_curthread

(kgdb) p *((struct mdglobaldata *)gd)
$4 = {mi = {gd_prvspace = 0xff800000, gd_curthread = 0xc04e0860,
    gd_tdfreecount = 0, gd_reqflags = 2, gd_freesysun = 0x0, gd_tdallq =
     {tqh_first = 0xff80034c, tqh_last = 0xc0530c88}, gd_tdfreeq =
     {tqh_first = 0x0, tqh_last = 0xff80001c}, gd_tdrunq = {
     {tqh_first = 0x0, tqh_last = 0xff800024},
     {tqh_first = 0x0, tqh_last = 0xff80002c}, {
. ..

the assignment of td seems to go ok

(kgdb) display/i $pc
1: x/i $eip  0xc0410632 <spl0+6>:       mov    0x4(%eax),%edx
(kgdb) p/x $eax
$1 = 0xff800000
(kgdb) si
179             td->td_cpl = 0;
1: x/i $eip  0xc0410635 <spl0+9>:       movl   $0x0,0xc8(%edx)
(kgdb) p/x $edx
$2 = 0xc04e0860
(kgdb) p td
$3 = (struct thread *) 0xc04e0860

but something bad is happening upon dereferencing td

(kgdb) p td->td_cpl
There is no member named td_cpl.
(kgdb) p/x td->td_mach.mtd_cpl
$4 = 0xffffffff
(kgdb) si

Asking gdb about 0xc04e0860 gives back <thread0+64> if that is any help.

Chuck Tuffli
Agilent Technologies

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