KVM VMX: Add all-context INVVPID type support
PATCH 1/2 KVM VMX: Add all-context INVVPID type support
Add all-context INVVPID type support.
Signed-off-by Gui Jianfeng <[email protected]>
--- arch/x86/include/asm/vmx.h | 1 + arch/x86/kvm/vmx.c | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-)
arch/x86/include/asm/vmx.h +1 -0
@@ -377,6 +377,7 @@ enum vmcs_field {#define VMX_EPT_EXTENT_GLOBAL_BIT (1ull << 26)#define VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT (1ull << 9)/* (41 - 32) */ +#define VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT (1ull << 10)/* (42 - 32) */ #define VMX_EPT_DEFAULT_GAW 3#define VMX_EPT_MAX_GAW 0x4
arch/x86/kvm/vmx.c +21 -2
@@ -360,6 +360,11 @@ static inline bool cpu_has_vmx_invvpid_single(void)return vmx_capability.vpid &VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT ; } +static inline bool cpu_has_vmx_invvpid_global (void ) +{ +return vmx_capability.vpid &VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT ; +} +static inline bool cpu_has_vmx_ept (void ) { return vmcs_config.cpu_based_2nd_exec_ctrl &
@@ -508,6 +513,20 @@ static inline void vpid_sync_vcpu_all(struct vcpu_vmx *vmx)__invvpid (VMX_VPID_EXTENT_SINGLE_CONTEXT , vmx->vpid,0 ); } +static inline void vpid_sync_vcpu_global (void ) +{ +if (cpu_has_vmx_invvpid_global ()) +__invvpid (VMX_VPID_EXTENT_ALL_CONTEXT ,0 ,0 ); +} + +static inline void vpid_sync_context (struct vcpu_vmx *vmx) +{ +if (cpu_has_vmx_invvpid_single ()) +vpid_sync_vcpu_all (vmx); +else +vpid_sync_vcpu_global (); +} +static inline void ept_sync_global (void ) {if (cpu_has_vmx_invept_global ())
@@ -1797,7 +1816,7 @@ static void exit_lmode(struct kvm_vcpu *vcpu)static void vmx_flush_tlb (struct kvm_vcpu *vcpu) { -vpid_sync_vcpu_all (to_vmx (vcpu)); +vpid_sync_context (to_vmx (vcpu));if (enable_ept)ept_sync_context (construct_eptp (vcpu->arch.mmu.root_hpa)); }
@@ -2753,7 +2772,7 @@ static int vmx_vcpu_reset(struct kvm_vcpu *vcpu)vmx_fpu_activate (&vmx->vcpu);update_exception_bitmap (&vmx->vcpu); -vpid_sync_vcpu_all (vmx); +vpid_sync_context (vmx); ret =0 ;
Signature · 1 line
1.6.5.2
Avi Kivity
AppliedQuoted 2 lines · Gui Jianfeng
Add all-context INVVPID type support.
Applied both, thanks.
Signature · 1 line
error compiling committee.c: too many arguments to function