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-devel

[Xen-devel] [PATCH][3/3] 1GB Page Table Support for HVM Guest

To: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>, "Xu, Dongxiao" <dongxiao.xu@xxxxxxxxx>, "'xen-devel@xxxxxxxxxxxxxxxxxxx'" <xen-devel@xxxxxxxxxxxxxxxxxxx>, Tim Deegan <Tim.Deegan@xxxxxxxxxx>
Subject: [Xen-devel] [PATCH][3/3] 1GB Page Table Support for HVM Guest
From: Wei Huang <wei.huang2@xxxxxxx>
Date: Fri, 2 Apr 2010 10:35:05 -0500
Cc:
Delivery-date: Fri, 02 Apr 2010 08:42:43 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.17 (X11/20080914)
This patch adds a new field in hvm to indicate 1gb is supported by CPU. In addition, users can turn 1GB feature on/off using a Xen option ("hap_1gb", default is off). Per Tim's suggestion, I also add an assertion check in shadow/common.c file to prevent affecting shadow code.

Signed-off-by: Wei Huang <wei.huang2@xxxxxxx>
Acked-by: Dongxiao Xu <dongxiao.xu@xxxxxxxxx>
Acked-by: Tim Deegan <tim.deegan@xxxxxxxxxx>

# HG changeset patch
# User root@xxxxxxxxxxxxxxxxxxx
# Date 1270220684 18000
# Node ID ab6294d72808fcb933e7a53953476c294a6163eb
# Parent  c2375d0545b72f1ba83072c502b6c437fbdc9770
add new IOMMU options

diff -r c2375d0545b7 -r ab6294d72808 xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Fri Apr 02 10:04:06 2010 -0500
+++ b/xen/arch/x86/hvm/svm/svm.c        Fri Apr 02 10:04:44 2010 -0500
@@ -883,6 +883,8 @@
                          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;
 
     hvm_enable(&svm_function_table);
 }
diff -r c2375d0545b7 -r ab6294d72808 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c        Fri Apr 02 10:04:06 2010 -0500
+++ b/xen/arch/x86/hvm/vmx/vmx.c        Fri Apr 02 10:04:44 2010 -0500
@@ -1445,6 +1445,8 @@
 
     if ( cpu_has_vmx_ept )
         vmx_function_table.hap_supported = 1;
+    
+    vmx_function_table.hap_1gb_pgtb = 0;
 
     setup_vmcs_dump();
 
diff -r c2375d0545b7 -r ab6294d72808 xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c     Fri Apr 02 10:04:06 2010 -0500
+++ b/xen/arch/x86/mm/p2m.c     Fri Apr 02 10:04:44 2010 -0500
@@ -38,6 +38,10 @@
 /* Debugging and auditing of the P2M code? */
 #define P2M_AUDIT     0
 #define P2M_DEBUGGING 0
+
+/* turn on/off 1GB host page table support for hap */
+static int opt_hap_1gb = 0;
+boolean_param("hap_1gb", opt_hap_1gb);
 
 /* Printouts */
 #define P2M_PRINTK(_f, _a...)                                \
@@ -1740,9 +1744,9 @@
     while ( todo )
     {
         if ( is_hvm_domain(d) && d->arch.hvm_domain.hap_enabled )
-            order = ( (((gfn | mfn_x(mfn) | todo) & ((1ul << 18) - 1)) == 0) ) 
?
-                    18 :
-                    (((gfn | mfn_x(mfn) | todo) & ((1ul << 9) - 1)) == 0) ? 9 
: 0;
+            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;
 
         else
             order = 0;
diff -r c2375d0545b7 -r ab6294d72808 xen/arch/x86/mm/shadow/common.c
--- a/xen/arch/x86/mm/shadow/common.c   Fri Apr 02 10:04:06 2010 -0500
+++ b/xen/arch/x86/mm/shadow/common.c   Fri Apr 02 10:04:44 2010 -0500
@@ -3452,6 +3452,11 @@
 {
     struct domain *d = v->domain;
 
+    /* The following assertion is to make sure we don't step on 1GB host
+     * page support of HVM guest. */
+    ASSERT(!(level > 2 && (l1e_get_flags(*p) & _PAGE_PRESENT) &&
+             (l1e_get_flags(*p) & _PAGE_PSE)));
+
     /* If we're removing an MFN from the p2m, remove it from the shadows too */
     if ( level == 1 )
     {
diff -r c2375d0545b7 -r ab6294d72808 xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h     Fri Apr 02 10:04:06 2010 -0500
+++ b/xen/include/asm-x86/hvm/hvm.h     Fri Apr 02 10:04:44 2010 -0500
@@ -68,6 +68,10 @@
 
     /* Support Hardware-Assisted Paging? */
     int hap_supported;
+
+    /* Support 1GB Harware-Assisted Paging? */
+    int hap_1gb_pgtb;
+
 
     /*
      * Initialise/destroy HVM domain/vcpu resources
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH][3/3] 1GB Page Table Support for HVM Guest, Wei Huang <=