WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] HAP: Add hardware capability check for 2M

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] HAP: Add hardware capability check for 2MB super page.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 29 May 2010 00:30:40 -0700
Delivery-date: Sat, 29 May 2010 00:34:11 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1275030894 -3600
# Node ID b74af3abf72d2ac86ae271f4169929f22674a7bb
# Parent  d86065bbb312cdf180a78ddecc7da18659ef6570
HAP: Add hardware capability check for 2MB super page.

While setting the HAP entry previously, we only check the hardware
capability for 1GB super page. This patch adds hardware capability
check for 2MB superpage

Also, Intel SDM doesn't exclude 1GB feature for 32/pae
host. Therefore remove the BUG_ON() check in common code.

Signed-off-by: Dongxiao Xu <dongxiao.xu@xxxxxxxxx>
---
 xen/arch/x86/hvm/svm/svm.c    |    5 +++--
 xen/arch/x86/hvm/vmx/vmcs.c   |    3 ++-
 xen/arch/x86/hvm/vmx/vmx.c    |    2 +-
 xen/arch/x86/mm/p2m.c         |   12 ++++--------
 xen/include/asm-x86/hvm/hvm.h |    7 +++++--
 5 files changed, 15 insertions(+), 14 deletions(-)

diff -r d86065bbb312 -r b74af3abf72d xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Fri May 28 08:12:15 2010 +0100
+++ b/xen/arch/x86/hvm/svm/svm.c        Fri May 28 08:14:54 2010 +0100
@@ -935,8 +935,9 @@ struct hvm_function_table * __init start
                          cpuid_edx(0x8000000A) : 0);
 
     svm_function_table.hap_supported = cpu_has_svm_npt;
-    svm_function_table.hap_1gb_pgtb = 
-        (CONFIG_PAGING_LEVELS == 4)? !!(cpuid_edx(0x80000001) & 0x04000000):0;
+    svm_function_table.hap_superpage_level =
+        ((CONFIG_PAGING_LEVELS == 4) && (cpuid_edx(0x80000001) & 0x04000000)) ?
+            2 : 1;
 
     return &svm_function_table;
 }
diff -r d86065bbb312 -r b74af3abf72d xen/arch/x86/hvm/vmx/vmcs.c
--- a/xen/arch/x86/hvm/vmx/vmcs.c       Fri May 28 08:12:15 2010 +0100
+++ b/xen/arch/x86/hvm/vmx/vmcs.c       Fri May 28 08:14:54 2010 +0100
@@ -94,7 +94,8 @@ static void __init vmx_display_features(
 
     if ( vmx_ept_super_page_level_limit )
         printk("EPT supports %s super page.\n",
-               vmx_ept_super_page_level_limit > 1 ? "1G" : "2M");
+               (vmx_ept_super_page_level_limit == 2) ? "1G" :
+               ((vmx_ept_super_page_level_limit == 1) ? "2M" : "4K"));
 }
 
 static u32 adjust_vmx_controls(
diff -r d86065bbb312 -r b74af3abf72d xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c        Fri May 28 08:12:15 2010 +0100
+++ b/xen/arch/x86/hvm/vmx/vmx.c        Fri May 28 08:14:54 2010 +0100
@@ -1435,7 +1435,7 @@ struct hvm_function_table * __init start
         setup_ept_dump();
     }
     
-    vmx_function_table.hap_1gb_pgtb = (vmx_ept_super_page_level_limit == 2);
+    vmx_function_table.hap_superpage_level = vmx_ept_super_page_level_limit;
 
     setup_vmcs_dump();
 
diff -r d86065bbb312 -r b74af3abf72d xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c     Fri May 28 08:12:15 2010 +0100
+++ b/xen/arch/x86/mm/p2m.c     Fri May 28 08:14:54 2010 +0100
@@ -1757,16 +1757,12 @@ int set_p2m_entry(struct domain *d, unsi
     {
         if ( is_hvm_domain(d) && paging_mode_hap(d) )
             order = ( (((gfn | mfn_x(mfn) | todo) & ((1ul << 18) - 1)) == 0) &&
-                      hvm_funcs.hap_1gb_pgtb && opt_hap_1gb ) ? 18 :
-                (((gfn | mfn_x(mfn) | todo) & ((1ul << 9) - 1)) == 0) ? 9 : 0;
+                      (hvm_funcs.hap_superpage_level == 2) &&
+                      opt_hap_1gb ) ? 18 :
+                ((((gfn | mfn_x(mfn) | todo) & ((1ul << 9) - 1)) == 0) &&
+                      (hvm_funcs.hap_superpage_level >= 1)) ? 9 : 0;
         else
             order = 0;
-
-        /* Note that we only enable hap_1gb_pgtb when CONFIG_PAGING_LEVELS==4. 
-         * So 1GB should never be enabled under 32bit or PAE modes. But for
-         * safety's reason, we double-check the page order again..
-         */
-        BUG_ON(order == 18 && CONFIG_PAGING_LEVELS < 4);
 
         if ( !d->arch.p2m->set_entry(d, gfn, mfn, order, p2mt) )
             rc = 0;
diff -r d86065bbb312 -r b74af3abf72d xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h     Fri May 28 08:12:15 2010 +0100
+++ b/xen/include/asm-x86/hvm/hvm.h     Fri May 28 08:14:54 2010 +0100
@@ -72,8 +72,11 @@ struct hvm_function_table {
     /* Support Hardware-Assisted Paging? */
     int hap_supported;
 
-    /* Support 1GB Harware-Assisted Paging? */
-    int hap_1gb_pgtb;
+    /*
+     * Indicate HAP super page level.
+     * 0 -- 4KB, 1 -- 2MB, 2 -- 1GB.
+     */
+    int hap_superpage_level;
 
 
     /*

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] HAP: Add hardware capability check for 2MB super page., Xen patchbot-unstable <=