Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Jul 2002 21:58:05 +0200 (SAT)
From:      John Hay <jhay@icomtek.csir.co.za>
To:        peter@wemm.org (Peter Wemm)
Cc:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/conf options.i386 options.pc98 src/sys/i386/i386 bios.c db_interface.c locore.s mp_machdep.c mpapic.c pm
Message-ID:  <200207121958.g6CJw5E63833@zibbi.icomtek.csir.co.za>
In-Reply-To: <20020712192420.C71223811@overcee.wemm.org> from Peter Wemm at "Jul 12, 2002 12:24:20 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
> John Hay wrote:
> > > In message: <200207120756.g6C7uBjZ051826@freefall.freebsd.org>
> > >             Peter Wemm <peter@FreeBSD.org> writes:
> > > :   - It actually works this time, honest!
> > 
> > My dual PII machine panic while booting now. I have tried with and without
> > acpi, just in case, but that does not make a difference.
> > 
> > ############################
> > Hit [Enter] to boot immediately, or any other key for command prompt.
> > Booting [/boot/kernel/kernel]...               
> > ACPI autoload failed - no such file or directory
> > Copyright (c) 1992-2002 The FreeBSD Project.
> > Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
> >         The Regents of the University of California. All rights reserved.
> > FreeBSD 5.0-CURRENT #66: Fri Jul 12 18:46:29 SAST 2002
> >     jhay@beast.icomtek.csir.co.za:/usr/src/sys/i386/compile/BEAST
> > Preloaded elf kernel "/boot/kernel/kernel" at 0xc043b000.
> > Timecounter "i8254"  frequency 1193520 Hz
> > CPU: Pentium II/Pentium II Xeon/Celeron (267.35-MHz 686-class CPU)
> >   Origin = "GenuineIntel"  Id = 0x633  Stepping = 3
> >   Features=0x80fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,
>     CMOV,MMX>
> > real memory  = 134205440 (131060K bytes)
> > avail memory = 125702144 (122756K bytes)
> > Programming 24 pins in IOAPIC #0
> > IOAPIC #0 intpin 2 -> irq 0
> > 
> > 
> > Fatal trap 12: page fault while in kernel mode
> > cpuid = 0; lapic.id = 01000000
> > fault virtual address   = 0xbff00498
> > fault code              = supervisor read, protection violation
> > instruction pointer     = 0x8:0xc02d4468
> > stack pointer           = 0x10:0xc045dcf4
> > frame pointer           = 0x10:0xc045dcfc
> > code segment            = base 0x0, limit 0xfffff, type 0x1b
> >                         = DPL 0, pres 1, def32 1, gran 1
> > processor eflags        = interrupt enabled, resume, IOPL = 0
> > current process         = 0 ()
> > kernel: type 12 trap, code=0
> > Stopped at      pmap_set_opt+0xa8:      cmpl    $0,PTmap(%eax)
> > db>
> > ############################
> 
> Umm, what the hell?  First off, the DISABLE_PG_G option avoids this block
> of code, so you shouldn't be stuck.
> 
> Secondly, the code in question is:
>                 if (pgeflag) {
>                         /* Turn on PG_G for text, data, bss pages. */
>                         va = (vm_offset_t)btext;
>                         endva = KERNBASE + KERNend;
>                         while (va < endva) {
>                                 pte = vtopte(va);
>                                 if (*pte)
>                                 ^^^^^^^^^
>                                         *pte |= pgeflag;
>                                 va += PAGE_SIZE;
>                         }
>                         invltlb();      /* Insurance */
>                 }
> #define vtopte(va)      (PTmap + i386_btop(va))
> 
> "read protection violation"??  We cannot read the page table pages that map
> in the kernel?
> 
> Can you repeat this anywhere else?  Or is it just that one box?

Well this is box I try current first. I can try it on another, but it will
take a while.

> Do you
> have any unusual kernel compile options or tunables? I'll go over the code

I use a serial console. I have CPUTYPE=i686 in /etc/make.conf and these
(maybe less normal ones) in my kernel config:

options         INET6
options         MROUTING
options         PPS_SYNC
options         CLK_USE_TSC_CALIBRATION
options         "CLK_USE_I8254_CALIBRATION"
makeoptions     DEBUG=-g
options         DDB
options         INVARIANTS
options         INVARIANT_SUPPORT
options         WITNESS

> again but it would be useful if I could get some clues as to why it happens
> for you.  Can you do a 'show all registers' for me and in particular tell
> me what %eax is?  That will tell me the KVA address that it is trying to
> access the pte for.

db> show all registers
No such command
db> show all
procs
db> show registers
cs                 0x8
ds          0xc0450010
es                0x10
fs                0x18
ss                0x10
eax           0x300498
ecx         0xc043c000
edx         0xc0126b10  btext
ebx              0x100
esp         0xc045dcf4
ebp         0xc045dcfc
esi         0xc0463000
edi         0xbfeff000  PTD
eip         0xc02d4468  pmap_set_opt+0xa8
efl            0x90202
dr0                  0
dr1                  0
dr2                  0
dr3                  0
dr4         0xffff0ff0
dr5              0x400
dr6         0xffff0ff0
dr7              0x400
pmap_set_opt+0xa8:      cmpl    $0,PTmap(%eax)
db> 

> 
> If this is absolutely repeatable, try throwing a #if 0 around that block of
> code, it isn't as severe as DISABLE_PG_G.  You would lose PG_G on kernel
> text+data only instead of that plus mapped kernel pages.  That should be
> mostly harmless because we should be running from the 4MB page for the most
> part.  (say, how big is your kernel?  More than 3MB? check the size(1)
> output please)

Well I have tried the kernel a few times and it did the same everytime.

beast:/home/jhay # size /boot/kernel/kernel 
   text    data     bss     dec     hex filename
2311433  203892  428320 2943645  2cea9d /boot/kernel/kernel

I'll try the #if 0 and DISABLE_PG_G tomorrow morning. Now it is bedtime
for me.

John
-- 
John Hay -- John.Hay@icomtek.csir.co.za / jhay@FreeBSD.org

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




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