aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_64/traps.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-01-28 10:17:05 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-01-28 10:17:05 +0000
commit4376c05c311320beb528213b1ae3bb0371e2b6c8 (patch)
tree8fd2d827ff973c65cea66413309a82afb164acd6 /xen/arch/x86/x86_64/traps.c
parentb124770528e333fcb4efb408d7bbf931ccef3b6e (diff)
downloadxen-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.c8
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);