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

[Xen-devel] Page fault on mapped pages with reserved bits set



I'm porting a light weight kernel to run under the Xen hypervisor
and have run into a problem while trying to switch to my page tables
on x86-64.  After a minor problem with switching to the new PML4
table that was cleared up when Mark Williamson suggested mapping
everything read-only in the current map before switching, as well
as switching the memory management code to use the hypervisor calls
to manipulate the pages and I now fault on the first write after
the new mapping.

The console error message is:

(XEN) Unhandled page fault in domain 33 on VCPU 0 (ec=0003)
(XEN) Pagetable walk from 0000006000520978:
(XEN)  L4[0x000] = 0000000026838025 0000000000000011
(XEN)  L3[0x180] = 00000000330a9025 0000000000000018
(XEN)  L2[0x002] = 0000000023d6d025 0000000000000024 
(XEN)  L1[0x120] = 0010000026fd1027 0000000000000520
(XEN) domain_crash_sync called from entry.S
(XEN) Domain 33 (vcpu#0) crashed on cpu#0:

The mapping corresponds with what was setup, other than the user and
reserved bits being set for the L1 entry.  Since this is x86-64,
I understand that Xen has set the user bit for my guest kernel,
but according to my paging extensions overview, the RSV bit may
trigger a page fault:

   If set (RSV=1), may cause a page fault.  Setting this bit only
   causes a page fault during page translation.  If the referenced
   page entry is in the TLB, then setting this bit, and referencing
   the page will not cause a page fault.  If the entry is not in
   the TLB, or gets flushed from the TLB, then the next reference
   to this page will cause a page fault.  The page fault error code
   on the stack will have the RSV bit set (bit-3).

I can't handle the page fault, since my kernel's page fault routine
faults if it tries to do anything that writes to memory, such as
push a return address on the stack.  To generate the error message
above I had to disable my kernel's trap table to let Xen handle it.
Otherwise the fault address is in my handler rather than in the
instruction after setting MMUEXT_BASE_PTR.

Any suggestions on things to try?

Thanks!
-- Trammell

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.