diff mbox

KVM: nVMX: Clear segment cache after switching between L1 and L2

Message ID 51293629.7050605@web.de (mailing list archive)
State New, archived
Headers show

Commit Message

Jan Kiszka Feb. 23, 2013, 9:35 p.m. UTC
From: Jan Kiszka <jan.kiszka@siemens.com>

Switching the VMCS obviously invalidates what may have been cached about
the guest segments.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---

Probably, the missing invalidations are harmless ATM, but you never
know.

 arch/x86/kvm/vmx.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Comments

Gleb Natapov Feb. 27, 2013, 1:41 p.m. UTC | #1
On Sat, Feb 23, 2013 at 10:35:37PM +0100, Jan Kiszka wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> Switching the VMCS obviously invalidates what may have been cached about
> the guest segments.
> 
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Applied, thanks.

> ---
> 
> Probably, the missing invalidations are harmless ATM, but you never
> know.
> 
>  arch/x86/kvm/vmx.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 94f3b66..d45f0e0 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -7236,6 +7236,8 @@ static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch)
>  	vcpu->cpu = cpu;
>  	put_cpu();
>  
> +	vmx_segment_cache_clear(vmx);
> +
>  	vmcs12->launch_state = 1;
>  
>  	prepare_vmcs02(vcpu, vmcs12);
> @@ -7504,6 +7506,8 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu)
>  	vcpu->cpu = cpu;
>  	put_cpu();
>  
> +	vmx_segment_cache_clear(vmx);
> +
>  	/* if no vmcs02 cache requested, remove the one we used */
>  	if (VMCS02_POOL_SIZE == 0)
>  		nested_free_vmcs02(vmx, vmx->nested.current_vmptr);
> -- 
> 1.7.3.4

--
			Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 94f3b66..d45f0e0 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -7236,6 +7236,8 @@  static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch)
 	vcpu->cpu = cpu;
 	put_cpu();
 
+	vmx_segment_cache_clear(vmx);
+
 	vmcs12->launch_state = 1;
 
 	prepare_vmcs02(vcpu, vmcs12);
@@ -7504,6 +7506,8 @@  static void nested_vmx_vmexit(struct kvm_vcpu *vcpu)
 	vcpu->cpu = cpu;
 	put_cpu();
 
+	vmx_segment_cache_clear(vmx);
+
 	/* if no vmcs02 cache requested, remove the one we used */
 	if (VMCS02_POOL_SIZE == 0)
 		nested_free_vmcs02(vmx, vmx->nested.current_vmptr);