[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 02/14] xen: vmx: Added VMX SPP feature flags and VM-Execution Controls.
From: Zhang Yi Z <yi.z.zhang@xxxxxxxxxxxxxxx> Add new secondary processor-based VM-execution control bit which defined as "sub-page write permission", VMX Procbased MSR - MSR_IA32_VMX_EXIT_CTLS bit 23 is the capability bit of SPP. And VMX_SECONDARY_EXEC_CONTROL bit 23 is the enable bit of SPP. Also we introduced a spp_enable parameter to control the SPP is ON/OFF, Set the default is OFF as we are on the way of enabling. we can add spp_enable=1 Xen boot cmdline to enable Xen SPP. Now SPP is active when the "Sub-page Write Protection" in Secondary VM-Execution Control is set and enable the Xen parameter by "spp_enable=1". Signed-off-by: Zhang Yi Z <yi.z.zhang@xxxxxxxxxxxxxxx> --- xen/arch/x86/hvm/vmx/vmcs.c | 14 ++++++++++++++ xen/include/asm-x86/hvm/vmx/vmcs.h | 3 +++ 2 files changed, 17 insertions(+) diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c index 8103b20..bee5d74 100644 --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -50,6 +50,9 @@ boolean_param("unrestricted_guest", opt_unrestricted_guest_enabled); static bool_t __read_mostly opt_apicv_enabled = 1; boolean_param("apicv", opt_apicv_enabled); +static bool_t __read_mostly opt_spp_enabled = 0; +boolean_param("spp_enable", opt_spp_enabled); + /* * These two parameters are used to config the controls for Pause-Loop Exiting: * ple_gap: upper bound on the amount of time between two successive @@ -138,6 +141,7 @@ static void __init vmx_display_features(void) P(cpu_has_vmx_virt_exceptions, "Virtualisation Exceptions"); P(cpu_has_vmx_pml, "Page Modification Logging"); P(cpu_has_vmx_tsc_scaling, "TSC Scaling"); + P(cpu_has_vmx_ept_spp, "EPT Sub-page Write Protection"); #undef P if ( !printed ) @@ -243,6 +247,8 @@ static int vmx_init_vmcs_config(void) opt |= SECONDARY_EXEC_UNRESTRICTED_GUEST; if ( opt_pml_enabled ) opt |= SECONDARY_EXEC_ENABLE_PML; + if ( opt_spp_enabled ) + opt |= SECONDARY_EXEC_ENABLE_SPP; /* * "APIC Register Virtualization" and "Virtual Interrupt Delivery" @@ -336,6 +342,14 @@ static int vmx_init_vmcs_config(void) _vmx_secondary_exec_control &= ~ SECONDARY_EXEC_PAUSE_LOOP_EXITING; } + /* SPP cannot be supported if EPT is not used */ + if ( !(_vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_EPT) ) + _vmx_secondary_exec_control &= ~SECONDARY_EXEC_ENABLE_SPP; + + /* Turn off opt_spp_enabled if SPP feature is not present */ + if ( !(_vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_SPP) ) + opt_spp_enabled = 0; + min = VM_EXIT_ACK_INTR_ON_EXIT; opt = VM_EXIT_SAVE_GUEST_PAT | VM_EXIT_LOAD_HOST_PAT | VM_EXIT_CLEAR_BNDCFGS; diff --git a/xen/include/asm-x86/hvm/vmx/vmcs.h b/xen/include/asm-x86/hvm/vmx/vmcs.h index e3cdfdf..139f590 100644 --- a/xen/include/asm-x86/hvm/vmx/vmcs.h +++ b/xen/include/asm-x86/hvm/vmx/vmcs.h @@ -235,6 +235,7 @@ extern u32 vmx_vmentry_control; #define SECONDARY_EXEC_ENABLE_PML 0x00020000 #define SECONDARY_EXEC_ENABLE_VIRT_EXCEPTIONS 0x00040000 #define SECONDARY_EXEC_XSAVES 0x00100000 +#define SECONDARY_EXEC_ENABLE_SPP 0x00800000 #define SECONDARY_EXEC_TSC_SCALING 0x02000000 extern u32 vmx_secondary_exec_control; @@ -312,6 +313,8 @@ extern u64 vmx_ept_vpid_cap; (vmx_secondary_exec_control & SECONDARY_EXEC_XSAVES) #define cpu_has_vmx_tsc_scaling \ (vmx_secondary_exec_control & SECONDARY_EXEC_TSC_SCALING) +#define cpu_has_vmx_ept_spp \ + (vmx_secondary_exec_control & SECONDARY_EXEC_ENABLE_SPP) #define VMCS_RID_TYPE_MASK 0x80000000 -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |