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>
