Skip to contentSkip to conversation

KVM: SVM: Do not issue virtual VMLOAD/VMSAVE supported-message

PATCH In review Borislav Petkov 4 participants 7 messages Sep 5, 2017 – Sep 13, 2017

Subsystems (3)
lore
Share & tools
lore

Borislav Petkov

author maintainer
#0 lore raw

PATCH 1/1 KVM: SVM: Do not issue virtual VMLOAD/VMSAVE supported-message

From: Borislav Petkov <[email protected]>

There's no need to issue that everytime during boot - we have the /proc/cpuinfo flag for people and software to query.

Cc Janakarajan Natarajan <[email protected]>
Cc Paolo Bonzini <[email protected]>
Cc Radim Krčmář <[email protected]>
---
 arch/x86/kvm/svm.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
arch/x86/kvm/svm.c +1 -4
index 8dbd8dbc83eb..f25e5b930932 100644
@@ -1101,11 +1101,8 @@ static __init int svm_hardware_setup(void)
 	if (vls) {
 		if (!npt_enabled ||
 		    !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
-		    !IS_ENABLED(CONFIG_X86_64)) {
+		    !IS_ENABLED(CONFIG_X86_64))
 			vls = false;
-		} else {
-			pr_info("Virtual VMLOAD VMSAVE supported\n");
-		}
 	}
 
 	return 0;
Signature · 1 line
2.13.0
#1 lore raw
Quoted 21 lines · Borislav Petkov

From: Borislav Petkov <[email protected]>

There's no need to issue that everytime during boot - we have the /proc/cpuinfo flag for people and software to query.

Cc Janakarajan Natarajan <[email protected]>
Cc Paolo Bonzini <[email protected]>
Cc Radim Krčmář <[email protected]>
---
 arch/x86/kvm/svm.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
arch/x86/kvm/svm.c +0 -0
index 8dbd8dbc83eb..f25e5b930932 100644
@@ -1101,11 +1101,8 @@ static __init int svm_hardware_setup(void)
 	if (vls) {
 		if (!npt_enabled ||

arch/x86/kvm/svm.c static __init int svm_hardware_setup(void) · line 1108

Quoted 10 lines
arch/x86/kvm/svm.c +1 -4
 		    !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
-		    !IS_ENABLED(CONFIG_X86_64)) {
+		    !IS_ENABLED(CONFIG_X86_64))
 			vls = false;
-		} else {
-			pr_info("Virtual VMLOAD VMSAVE supported\n");
-		}
 	}
 
 	return 0;

Maybe go one step further and incorporate everything (+vls) into a single if statement?

Signature · 3 lines
Thanks,

David
author maintainer
#2 lore raw
Quoted 2 lines · David Hildenbrand

Maybe go one step further and incorporate everything (+vls) into a single if statement?

Or maybe simplify it even more by not even looking at vls. If the user disables it, fine, if she enables it but the hw doesn't support it, it will be set to false automatically.

Or am I missing a case?

---
From: Borislav Petkov <[email protected]>
Date: Tue, 5 Sep 2017 18:59:55 +0200
Subject: [PATCH] KVM: SVM: Do not issue virtual VMLOAD/VMSAVE
supported-message
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

There's no need to issue that everytime during boot - we have the /proc/cpuinfo flag for people and software to query.

Also, simplify logic which verifies the vls chicken bit setting.

Cc David Hildenbrand <[email protected]>
Cc Janakarajan Natarajan <[email protected]>
Cc Paolo Bonzini <[email protected]>
Cc Radim Krčmář <[email protected]>
---
 arch/x86/kvm/svm.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)
arch/x86/kvm/svm.c +4 -9
index 8dbd8dbc83eb..d3c481778d9c 100644
@@ -1098,15 +1098,10 @@ static __init int svm_hardware_setup(void)
 		}
 	}
 
-	if (vls) {
-		if (!npt_enabled ||
-		    !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
-		    !IS_ENABLED(CONFIG_X86_64)) {
-			vls = false;
-		} else {
-			pr_info("Virtual VMLOAD VMSAVE supported\n");
-		}
-	}
+	if (!npt_enabled ||
+	    !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
+	    !IS_ENABLED(CONFIG_X86_64))
+		vls = false;
 
 	return 0;
 
Signature · 7 lines
2.13.0

-- 
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.
Reviewed-by
#3 lore raw
Quoted 48 lines · Borislav Petkov
Quoted 2 lines · David Hildenbrand

Maybe go one step further and incorporate everything (+vls) into a single if statement?

Or maybe simplify it even more by not even looking at vls. If the user disables it, fine, if she enables it but the hw doesn't support it, it will be set to false automatically.

Or am I missing a case?

---
From: Borislav Petkov <[email protected]>
Date: Tue, 5 Sep 2017 18:59:55 +0200
Subject: [PATCH] KVM: SVM: Do not issue virtual VMLOAD/VMSAVE
supported-message
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

There's no need to issue that everytime during boot - we have the /proc/cpuinfo flag for people and software to query.

Also, simplify logic which verifies the vls chicken bit setting.

Cc David Hildenbrand <[email protected]>
Cc Janakarajan Natarajan <[email protected]>
Cc Paolo Bonzini <[email protected]>
Cc Radim Krčmář <[email protected]>
---
 arch/x86/kvm/svm.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)
arch/x86/kvm/svm.c +0 -6
index 8dbd8dbc83eb..d3c481778d9c 100644
@@ -1098,15 +1098,10 @@ static __init int svm_hardware_setup(void)
 		}
 	}
 
-	if (vls) {
-		if (!npt_enabled ||
-		    !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
-		    !IS_ENABLED(CONFIG_X86_64)) {
-			vls = false;
-		} else {

arch/x86/kvm/svm.c static __init int svm_hardware_setup(void) · line 1107

Quoted 10 lines
arch/x86/kvm/svm.c +4 -3
-			pr_info("Virtual VMLOAD VMSAVE supported\n");
-		}
-	}
+	if (!npt_enabled ||
+	    !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
+	    !IS_ENABLED(CONFIG_X86_64))
+		vls = false;
 
 	return 0;
 

had the same idea but was worried about runtime. but this is really only executed once, so

Signature · 3 lines
Thanks,

David
author maintainer
#4 lore raw
Quoted 2 lines · David Hildenbrand

had the same idea but was worried about runtime. but this is really only executed once, so

Yap, exactly. Forgot to say ... but I was thinking of saying it. :)

Signature · 4 lines
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.
#5 lore raw
In reply to Borislav Petkov

2017-09-05 19:06+0200, Borislav Petkov:

Quoted 18 lines

From: Borislav Petkov <[email protected]>

There's no need to issue that everytime during boot - we have the /proc/cpuinfo flag for people and software to query.

Cc Janakarajan Natarajan <[email protected]>
Cc Paolo Bonzini <[email protected]>
Cc Radim Krčmář <[email protected]>
---
 arch/x86/kvm/svm.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
arch/x86/kvm/svm.c +0 -0
index 8dbd8dbc83eb..f25e5b930932 100644

arch/x86/kvm/svm.c static __init int svm_hardware_setup(void) · line 1107

Quoted 8 lines
arch/x86/kvm/svm.c +1 -3
@@ -1101,11 +1101,8 @@ static __init int svm_hardware_setup(void)
 	if (vls) {
 		if (!npt_enabled ||
 		    !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
-		    !IS_ENABLED(CONFIG_X86_64)) {
+		    !IS_ENABLED(CONFIG_X86_64))
 			vls = false;
-		} else {
-			pr_info("Virtual VMLOAD VMSAVE supported\n");

SVM prints more offending messages on boot, so I'd do all one go. I am thinking of collocating the info instead as the information might prevent one round of asking for SVM features.
---8<---
Subject: [PATCH] KVM: SVM: print enabled features on one line

The information might be useful for debugging, but having each feature present itself is needlessly verbose.

---
 arch/x86/kvm/svm.c | 56 ++++++++++++++++++------------------------------------
 1 file changed, 19 insertions(+), 37 deletions(-)
arch/x86/kvm/svm.c +19 -37
index af54327b9017..1901815777d0 100644
@@ -1078,10 +1078,8 @@ static __init int svm_hardware_setup(void)
 		kvm_tsc_scaling_ratio_frac_bits = 32;
 	}
 
-	if (nested) {
-		printk(KERN_INFO "kvm: Nested Virtualization enabled\n");
+	if (nested)
 		kvm_enable_efer_bits(EFER_SVME | EFER_LMSLE);
-	}
 
 	for_each_possible_cpu(cpu) {
 		r = svm_cpu_init(cpu);
@@ -1089,48 +1087,32 @@ static __init int svm_hardware_setup(void)
 			goto err;
 	}
 
-	if (!boot_cpu_has(X86_FEATURE_NPT))
-		npt_enabled = false;
-
-	if (npt_enabled && !npt) {
-		printk(KERN_INFO "kvm: Nested Paging disabled\n");
+	if (!boot_cpu_has(X86_FEATURE_NPT) || !npt)
 		npt_enabled = false;
-	}
 
-	if (npt_enabled) {
-		printk(KERN_INFO "kvm: Nested Paging enabled\n");
+	if (npt_enabled)
 		kvm_enable_tdp();
-	} else
+	else
 		kvm_disable_tdp();
 
-	if (avic) {
-		if (!npt_enabled ||
-		    !boot_cpu_has(X86_FEATURE_AVIC) ||
-		    !IS_ENABLED(CONFIG_X86_LOCAL_APIC)) {
-			avic = false;
-		} else {
-			pr_info("AVIC enabled\n");
+	if (!npt_enabled ||
+	    !boot_cpu_has(X86_FEATURE_AVIC) ||
+	    !IS_ENABLED(CONFIG_X86_LOCAL_APIC))
+		avic = false;
 
-			amd_iommu_register_ga_log_notifier(&avic_ga_log_notifier);
-		}
-	}
+	if (avic)
+		amd_iommu_register_ga_log_notifier(&avic_ga_log_notifier);
 
-	if (vls) {
-		if (!npt_enabled ||
-		    !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
-		    !IS_ENABLED(CONFIG_X86_64)) {
-			vls = false;
-		} else {
-			pr_info("Virtual VMLOAD VMSAVE supported\n");
-		}
-	}
+	if (!npt_enabled ||
+	    !boot_cpu_has(X86_FEATURE_V_VMSAVE_VMLOAD) ||
+	    !IS_ENABLED(CONFIG_X86_64))
+		vls = false;
 
-	if (vgif) {
-		if (!boot_cpu_has(X86_FEATURE_VGIF))
-			vgif = false;
-		else
-			pr_info("Virtual GIF supported\n");
-	}
+	if (!boot_cpu_has(X86_FEATURE_VGIF))
+		vgif = false;
+
+	pr_info("SVM nested=%d npt=%d avic=%d vls=%d vgif=%d\n",
+			nested, npt_enabled, avic, vls, vgif);
 
 	return 0;
 
Signature · 1 line
2.14.1
maintainer
#6 lore raw

arch/x86/kvm/svm.c static __init int svm_hardware_setup(void) · line 1115

Quoted 6 lines · Radim Krčmář
arch/x86/kvm/svm.c +5 -1
-	}
+	if (!boot_cpu_has(X86_FEATURE_VGIF))
+		vgif = false;
+
+	pr_info("SVM nested=%d npt=%d avic=%d vls=%d vgif=%d\n",
+			nested, npt_enabled, avic, vls, vgif);

I doubt we'd get the above info message more than sporadically, and all
these are available with a simple

grep -r . /sys/module/kvm_amd/parameters

which we already do routinely ask bug reporters for the equivalent kvm_intel. So I'd say, zap it.

Paolo