page fault on 1.2.0-RELEASE

Chuck Tuffli chuck_tuffli at
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().

	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.

	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()

	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; = 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