page fault on 1.2.0-RELEASE
Chuck Tuffli
chuck_tuffli at agilent.com
Mon Jun 13 13:52:22 PDT 2005
On Sun, Jun 12, 2005 at 10:17:01PM -0700, Matthew Dillon wrote:
. ..
> Would you like to do some debugging with the 1.2.0-RELEASE kernel
you betcha
> sources? It should be possible to figure out what is going on by
> adding printf()s in vm_page_startup() and vm_add_new_page(). I
> would print out e.g. first_page, page_range, npages, end,
> vm_page_array, new_end, and the 'mapped' variable. I would print
> all those out after it calls pmap_map().
vm_page_startup:
first_page 0x1
page_range 0xb
npages -2046298670
end 0xffc0008f00000000
new_end 0xffc0008efffff000
vm_page_array 0xc081a000
mapped 0xc081b000
new_end 0xffc0008efffff000
> I would also print out the phys_avail[i] and phys_avail[i+1] inside
> the for (...) loop under the 'Construct the free queues' comment,
> and the 'ps' and 'last_pa' variables just before the inner while()
> loop.
vm_page_startup:
phys_avail[i] 0x1000
phys_avail[i+1] 0x9f000
last_pa 0x9f000
As a bonus, a couple of items from vm_add_new_page printed right
before the call 'if (vpq->flipflop)'. The instruction pointer looked
like it might be somewhere in the TAILQ_INSERT_HEAD()
vm_add_new_page:
m 0xc081a000
m->queue 52410
vpq 0xc052ffa8
vpq->flipflop 8
vpq->pl 0xc052ffa8
Fatal trap 12: page fault while in kernel mode
mp_lock = 00000000; cpuid = 0; lapic.id = 00000000
fault virtual address = 0x26000
fault code = supervisor write, page not present
instruction pointer = 0x8:0xc02f2753
stack pointer = 0x10:0xc059ace8
frame pointer = 0x10:0xc059ad0c
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 (thread0)
current thread = pri 44 (CRIT)
interrupt mask = net tty bio cam <- SMP: XXX
kernel: type 12 trap, code=2
--
Chuck Tuffli
Agilent Technologies
More information about the Bugs
mailing list