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

Re: [Xen-devel] PAE, Elf headers, and Extended CR3 registers



Keir Fraser wrote:

'Extended CR3' means that, on PAE, we fold the higher-order bits of the page directory address into the low-order bits of the 32-bit virtual CR3 value.

See the xen_pfn_to_cr3() and xen_cr3_to_pfn() macros in
xen/include/public/arch-x86_64.h.

In general the guest OS does not manipulate CR3 values at the hypercall
interface, so this is not an issue (e.g., the hypercall for switching
pagetable base pointer takes a page frame number). The one exception in Linux was that SMP booting required writing a CR3 value into a vcpu_context structure. So that's the only place we use those two conversion macros.

Thanks, Keir.

Interesting encoding of the virtual CR3 value:

#define xen_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned) (pfn) >> 20))

This comment in the Xen code clarifies my thinking on this:

/* Only PDPTs above 4GB boundary need to be shadowed in low memory. */
#define l3tab_needs_shadow(mfn) ((mfn) >= 0x100000)

My concern had been that 'extended CR3' implied hardware support for a 64 bit CR3 register. Instead it means that I shouldn't really care if the mfn of my Page Table Directory Pointer is above 4GB, Xen will handle the condition for me. And, the way I'll decode the mfn, if necessary (which I would agree should be rare), would be with those macros.

-- Randy

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