1GB Page Table Support for HVM Guest
PATCH 3/3 1GB Page Table Support for HVM Guest
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 <[email protected]>
Acked-by Dongxiao Xu <[email protected]>
Acked-by Tim Deegan <[email protected]>
# HG changeset patch
# User [email protected]
# Date 1270220684 18000
# Node ID ab6294d72808fcb933e7a53953476c294a6163eb # Parent c2375d0545b72f1ba83072c502b6c437fbdc9770 add new IOMMU options
xen/arch/x86/hvm/svm/svm.c +2 -0
@@ -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); }
xen/arch/x86/hvm/vmx/vmx.c +2 -0
@@ -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 ();
xen/arch/x86/mm/p2m.c +7 -3
@@ -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 ;
xen/arch/x86/mm/shadow/common.c +5 -0
@@ -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 ) {
xen/include/asm-x86/hvm/hvm.h +4 -0
@@ -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
[email protected]
http://lists.xensource.com/xen-devel