diff mbox

[v2,2/2] x86: svm: make wbinvd faster

Message ID 20150302180446.25137.93897.stgit@joelvmguard2.amd.com (mailing list archive)
State New, archived
Headers show

Commit Message

Joel Schopp March 2, 2015, 6:04 p.m. UTC
From: David Kaplan <David.Kaplan@amd.com>
No need to re-decode WBINVD since we know what it is from the intercept.

Signed-off-by: David Kaplan <David.Kaplan@amd.com>
[extracted from larger unlrelated patch, forward ported, tested]
Signed-off-by: Joel Schopp <joel.schopp@amd.com>
---
 arch/x86/kvm/svm.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)


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

Comments

Radim Krčmář March 2, 2015, 7:05 p.m. UTC | #1
2015-03-02 12:04-0600, Joel Schopp:
> From: David Kaplan <David.Kaplan@amd.com>
> No need to re-decode WBINVD since we know what it is from the intercept.
> 
> Signed-off-by: David Kaplan <David.Kaplan@amd.com>
> [extracted from larger unlrelated patch, forward ported, tested]
> Signed-off-by: Joel Schopp <joel.schopp@amd.com>
> ---

Reviewed-by: Radim Kr?má? <rkrcmar@redhat.com>

> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> @@ -2774,6 +2774,13 @@ static int skinit_interception(struct vcpu_svm *svm)
>  	return 1;
>  }
>  
> +static int wbinvd_interception(struct vcpu_svm *svm)
> +{
> +	kvm_emulate_wbinvd(&svm->vcpu);
> +	return 1;
> +}
> +
> +

(Squashing these lines would have been a nice improvement.)

>  static int xsetbv_interception(struct vcpu_svm *svm)
>  {
>  	u64 new_bv = kvm_read_edx_eax(&svm->vcpu);
--
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/svm.c b/arch/x86/kvm/svm.c
index 0c9e377..794bca7 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -2774,6 +2774,13 @@  static int skinit_interception(struct vcpu_svm *svm)
 	return 1;
 }
 
+static int wbinvd_interception(struct vcpu_svm *svm)
+{
+	kvm_emulate_wbinvd(&svm->vcpu);
+	return 1;
+}
+
+
 static int xsetbv_interception(struct vcpu_svm *svm)
 {
 	u64 new_bv = kvm_read_edx_eax(&svm->vcpu);
@@ -3374,7 +3381,7 @@  static int (*const svm_exit_handlers[])(struct vcpu_svm *svm) = {
 	[SVM_EXIT_STGI]				= stgi_interception,
 	[SVM_EXIT_CLGI]				= clgi_interception,
 	[SVM_EXIT_SKINIT]			= skinit_interception,
-	[SVM_EXIT_WBINVD]                       = emulate_on_interception,
+	[SVM_EXIT_WBINVD]                       = wbinvd_interception,
 	[SVM_EXIT_MONITOR]			= monitor_interception,
 	[SVM_EXIT_MWAIT]			= mwait_interception,
 	[SVM_EXIT_XSETBV]			= xsetbv_interception,