diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-01-28 10:17:05 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-01-28 10:17:05 +0000 |
commit | 4376c05c311320beb528213b1ae3bb0371e2b6c8 (patch) | |
tree | 8fd2d827ff973c65cea66413309a82afb164acd6 /xen/arch/x86/x86_64/traps.c | |
parent | b124770528e333fcb4efb408d7bbf931ccef3b6e (diff) | |
download | xen-4376c05c311320beb528213b1ae3bb0371e2b6c8.tar.gz xen-4376c05c311320beb528213b1ae3bb0371e2b6c8.tar.bz2 xen-4376c05c311320beb528213b1ae3bb0371e2b6c8.zip |
x86-64: use 1GB pages in 1:1 mapping if available
At once adjust the 2/4Mb page handling slightly in a few places (to
match the newly added code):
- when re-creating a large page mapping after finding that all small
page mappings in the respective area are using identical flags and
suitable MFNs, the virtual address was already incremented pas the
area to be dealt with, which needs to be accounted for in the
invocation of flush_area() in that path
- don't or-in/and-out _PAGE_PSE on non-present pages
- when comparing flags, try minimse the number of l1f_to_lNf()/
lNf_to_l1f() instances used
- instead of skipping a single page when encountering a big page
mapping equalling to what a small page mapping would establish, skip
to the next larger page boundary
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'xen/arch/x86/x86_64/traps.c')
-rw-r--r-- | xen/arch/x86/x86_64/traps.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c index ef6ecd4225..71e8fbe210 100644 --- a/xen/arch/x86/x86_64/traps.c +++ b/xen/arch/x86/x86_64/traps.c @@ -146,9 +146,11 @@ void show_page_walk(unsigned long addr) l3e = l3t[l3_table_offset(addr)]; mfn = l3e_get_pfn(l3e); pfn = mfn_valid(mfn) ? get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; - printk(" L3[0x%03lx] = %"PRIpte" %016lx\n", - l3_table_offset(addr), l3e_get_intpte(l3e), pfn); - if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) ) + printk(" L3[0x%03lx] = %"PRIpte" %016lx%s\n", + l3_table_offset(addr), l3e_get_intpte(l3e), pfn, + (l3e_get_flags(l3e) & _PAGE_PSE) ? " (PSE)" : ""); + if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) || + (l3e_get_flags(l3e) & _PAGE_PSE) ) return; l2t = mfn_to_virt(mfn); |