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

Re: page fault on 1.2.0-RELEASE


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 13 Jun 2005 15:10:52 -0700 (PDT)

: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

    Great!

    A little broken... vm_paddr_t is a 64 bit quantity, you have to use
    %lld or %qd in your printfs .  That's why page_range and npages
    are broken.

:>     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

    The value for m->queue should not be possible.  The m->pc
    mask is 0x3f (63).  So the m->pc assignment and thus the
    m->queue assignment after it should be a fairly small number.

: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

    Since this is your rebuilt kernel you will have to 
    gdb -k yourkernel and 'disassemble 0xc02f2753'.

:Chuck Tuffli
:Agilent Technologies
:

					-Matt
					Matthew Dillon 
					<dillon@xxxxxxxxxxxxx>



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