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

Re: [Xen-devel] How works Xen mmu ?





On 03/06/2010 14:16, "Sylvestre Gallon" <syl@xxxxxxxxx> wrote:

> addr = get_cr3();                     // getting page directory
> addr &= 0xfffff000;                   // remove pdir flags
> addr = ((uint32_t*) addr_[0];     // get address of first page dir
> (0xb8000 is in the first pdir)
> addr += 0xb8 * 4;                    // 0xb8000 must be the pte 0xb8 into pdir
> 0
> 
> mmu.ptr = pte | MMU_NORMAL_PT_UPDATE;
> mmu.val = 0xb8000 | 0x3;        // 0x3 for pte present and rw flags
> 
> HYPERVISOR_mmu_update(&mmu, 1, NULL, DOMID_SELF);
> 
> while(42);
> 
> But when I try this code I get an unhandled page fault :/
> 
> Do I have misunderstood something ?

This is closer, but page table entries will be 64 bits not 32 bits (hence
use uint64_t). And also the page tables will have three or four levels
(depending on whether your guest is 32-bit PAE or 64-bit). So in the 64-bit
case for example, you would read cr3 to get pagedir_1, then index into
pagedir_1 to get pagedir_2, then index into pagedir_2 to get pagedir_3, then
index into pagedir_3 to get the pagetable. And mmu.ptr would point at an
entry in that pagetable.

 -- Keir



_______________________________________________
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®.