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

Re: [Xen-devel] about domU pagetable

> As I know , dom0 pagetable gets its PGT flags explicitly set in
> construct_dom0 , for example:
> page->u.inuse.type_info |= PGT_l3_page_table
> but how about domU's ? Where it get set ? By means of hypercall ? If
> so , which one ?

construct_dom0 scares me a little :-)

I'll try and give you a quick overview of how this all works, based on my 
current understanding.  I believe this to all be correct but bear in mind I 
might make mistakes.  Feel free to ask questions about anything.

Pages are identified as being pagetables when either a) they are loaded into 
CR3, the pagetable base register (on x86_32) b) they are referenced as part 
of an existing pagetable tree or c) they are pinned with pagetable type.

The initial state of a domain includes a set of bootstrap pagetables which map 
enough memory for the domain to get itself started.  Once the domain is 
running it'll probably build itself new pagetables.  The process of creating 
the bootstrap pagetables is being done in construct_dom0 for the initial 
domain (dom0 itself).  For other Xen domains, they are built in the userspace 
domain builder tool.  The code of this tool is different to when I last 
looked in detail but I think the pagetables are built in 
tools/libxc/xc_dom_x86.c and then pinned using hypercalls in 

This is all just to build minimal pagetables to get the domain up and running.  
Once the domain is running, it'll probably create new and larger pagetables.  
The will be validated by Xen at runtime:

When a new pagetable base pointer is loaded into CR3, the page pointed to and 
all pages that are also part of that pagetable tree will be validated and 
assigned the right types.  A domain may explicitly request that a pagetable 
(even one that isn't loaded into CR3) is validated by "pinning" it.  Xen sets 
the type when the table is pinned so that it won't have to check it every 
time the pagetable is loaded into CR3.  This improves performance.  It won't 
let the guest change the contents of the pagetable whilst it's pinned, so 
this is safe.

The leaf entries of a pagetable can be written to directly by a guest using 
the "writable pagetables" API.  The internal nodes of a pagetable (the ones 
that just point to other pagetable pages) cannot (if i remember right!) be 
written directly like this, they have to be set using a hypercall.


Push Me Pull You - Distributed SCM tool (http://www.cl.cam.ac.uk/~maw48/pmpu/)

Xen-devel mailing list



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