Linux Documentation
 help / color / mirror / Atom feed
* [PATCH v5 0/2] nosnp sev command line support
@ 2024-09-30 23:11 Pavan Kumar Paluri
  2024-09-30 23:11 ` [PATCH v5 1/2] x86, KVM:SVM: Move sev specific parsing into arch/x86/virt/svm Pavan Kumar Paluri
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Pavan Kumar Paluri @ 2024-09-30 23:11 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-doc, Borislav Petkov, Thomas Gleixner, Ingo Molnar,
	Dave Hansen, Eric Van Tassell, Tom Lendacky, Ashish Kalra,
	Michael Roth, H . Peter Anvin, Peter Zijlstra, Pavan Kumar Paluri

Provide "nosnp" boot option via "sev=nosnp" kernel command line to
prevent SEV-SNP[1] capable host kernel from enabling SEV-SNP and
initializing Reverse Map Table (RMP) [1].

On providing sev=nosnp via kernel command line:
cat /sys/module/kvm_amd/parameters/sev_snp should be "N".

This patchset is based on tip/master.

Reference:
[1] https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf

Changelog:
=========
v4->v5:
  * Move __read_mostly attribute to place where sev_cfg is declared (Tom)

v3->v4:
  * Remove an irrelevant header (Boris)
  * Rebase on latest tip/master
  * Link: https://lore.kernel.org/all/20240922033626.29038-1-papaluri@amd.com/

Pavan Kumar Paluri (2):
  x86, KVM:SVM: Move sev specific parsing into arch/x86/virt/svm
  x86 KVM:SVM: Provide "nosnp" boot option for sev kernel command line

 .../arch/x86/x86_64/boot-options.rst          |  3 ++
 arch/x86/coco/sev/core.c                      | 44 -------------------
 arch/x86/include/asm/sev-common.h             | 29 ++++++++++++
 arch/x86/virt/svm/Makefile                    |  1 +
 arch/x86/virt/svm/cmdline.c                   | 39 ++++++++++++++++
 5 files changed, 72 insertions(+), 44 deletions(-)
 create mode 100644 arch/x86/virt/svm/cmdline.c


base-commit: d1b8f40d000887720e0c123c382d75e7fbb75cb6
-- 
2.34.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v5 1/2] x86, KVM:SVM: Move sev specific parsing into arch/x86/virt/svm
  2024-09-30 23:11 [PATCH v5 0/2] nosnp sev command line support Pavan Kumar Paluri
@ 2024-09-30 23:11 ` Pavan Kumar Paluri
  2024-09-30 23:11 ` [PATCH v5 2/2] x86 KVM:SVM: Provide "nosnp" boot option for sev kernel command line Pavan Kumar Paluri
  2024-09-30 23:25 ` [PATCH v5 0/2] nosnp sev command line support Dave Hansen
  2 siblings, 0 replies; 7+ messages in thread
From: Pavan Kumar Paluri @ 2024-09-30 23:11 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-doc, Borislav Petkov, Thomas Gleixner, Ingo Molnar,
	Dave Hansen, Eric Van Tassell, Tom Lendacky, Ashish Kalra,
	Michael Roth, H . Peter Anvin, Peter Zijlstra, Pavan Kumar Paluri

Move SEV specific kernel command line option parsing support from
arch/x86/coco/sev/core.c to arch/x86/virt/svm/cmdline.c so that both
host and guest related SEV command line options can be supported.

No functional changes intended.

Signed-off-by: Pavan Kumar Paluri <papaluri@amd.com>
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
---
 arch/x86/coco/sev/core.c          | 44 -------------------------------
 arch/x86/include/asm/sev-common.h | 29 ++++++++++++++++++++
 arch/x86/virt/svm/Makefile        |  1 +
 arch/x86/virt/svm/cmdline.c       | 32 ++++++++++++++++++++++
 4 files changed, 62 insertions(+), 44 deletions(-)
 create mode 100644 arch/x86/virt/svm/cmdline.c

diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c
index de1df0cb45da..ff19e805e7a1 100644
--- a/arch/x86/coco/sev/core.c
+++ b/arch/x86/coco/sev/core.c
@@ -141,33 +141,6 @@ static DEFINE_PER_CPU(struct sev_es_save_area *, sev_vmsa);
 static DEFINE_PER_CPU(struct svsm_ca *, svsm_caa);
 static DEFINE_PER_CPU(u64, svsm_caa_pa);
 
-struct sev_config {
-	__u64 debug		: 1,
-
-	      /*
-	       * Indicates when the per-CPU GHCB has been created and registered
-	       * and thus can be used by the BSP instead of the early boot GHCB.
-	       *
-	       * For APs, the per-CPU GHCB is created before they are started
-	       * and registered upon startup, so this flag can be used globally
-	       * for the BSP and APs.
-	       */
-	      ghcbs_initialized	: 1,
-
-	      /*
-	       * Indicates when the per-CPU SVSM CA is to be used instead of the
-	       * boot SVSM CA.
-	       *
-	       * For APs, the per-CPU SVSM CA is created as part of the AP
-	       * bringup, so this flag can be used globally for the BSP and APs.
-	       */
-	      use_cas		: 1,
-
-	      __reserved	: 61;
-};
-
-static struct sev_config sev_cfg __read_mostly;
-
 static __always_inline bool on_vc_stack(struct pt_regs *regs)
 {
 	unsigned long sp = regs->sp;
@@ -2374,23 +2347,6 @@ static int __init report_snp_info(void)
 }
 arch_initcall(report_snp_info);
 
-static int __init init_sev_config(char *str)
-{
-	char *s;
-
-	while ((s = strsep(&str, ","))) {
-		if (!strcmp(s, "debug")) {
-			sev_cfg.debug = true;
-			continue;
-		}
-
-		pr_info("SEV command-line option '%s' was not recognized\n", s);
-	}
-
-	return 1;
-}
-__setup("sev=", init_sev_config);
-
 static void update_attest_input(struct svsm_call *call, struct svsm_attest_call *input)
 {
 	/* If (new) lengths have been returned, propagate them up */
diff --git a/arch/x86/include/asm/sev-common.h b/arch/x86/include/asm/sev-common.h
index 98726c2b04f8..9e36e8dcc997 100644
--- a/arch/x86/include/asm/sev-common.h
+++ b/arch/x86/include/asm/sev-common.h
@@ -8,6 +8,8 @@
 #ifndef __ASM_X86_SEV_COMMON_H
 #define __ASM_X86_SEV_COMMON_H
 
+#include <asm/cache.h>
+
 #define GHCB_MSR_INFO_POS		0
 #define GHCB_DATA_LOW			12
 #define GHCB_MSR_INFO_MASK		(BIT_ULL(GHCB_DATA_LOW) - 1)
@@ -220,4 +222,31 @@ struct snp_psc_desc {
 #define GHCB_ERR_INVALID_INPUT		5
 #define GHCB_ERR_INVALID_EVENT		6
 
+struct sev_config {
+	__u64 debug		: 1,
+
+	      /*
+	       * Indicates when the per-CPU GHCB has been created and registered
+	       * and thus can be used by the BSP instead of the early boot GHCB.
+	       *
+	       * For APs, the per-CPU GHCB is created before they are started
+	       * and registered upon startup, so this flag can be used globally
+	       * for the BSP and APs.
+	       */
+	      ghcbs_initialized	: 1,
+
+	      /*
+	       * Indicates when the per-CPU SVSM CA is to be used instead of the
+	       * boot SVSM CA.
+	       *
+	       * For APs, the per-CPU SVSM CA is created as part of the AP
+	       * bringup, so this flag can be used globally for the BSP and APs.
+	       */
+	      use_cas		: 1,
+
+	      __reserved	: 61;
+};
+
+extern struct sev_config sev_cfg;
+
 #endif
diff --git a/arch/x86/virt/svm/Makefile b/arch/x86/virt/svm/Makefile
index ef2a31bdcc70..eca6d71355fa 100644
--- a/arch/x86/virt/svm/Makefile
+++ b/arch/x86/virt/svm/Makefile
@@ -1,3 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
 
 obj-$(CONFIG_KVM_AMD_SEV) += sev.o
+obj-$(CONFIG_CPU_SUP_AMD) += cmdline.o
diff --git a/arch/x86/virt/svm/cmdline.c b/arch/x86/virt/svm/cmdline.c
new file mode 100644
index 000000000000..9640507342e0
--- /dev/null
+++ b/arch/x86/virt/svm/cmdline.c
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * AMD SVM-SEV command line parsing support
+ *
+ * Copyright (C) 2023 - 2024 Advanced Micro Devices, Inc.
+ *
+ * Author: Michael Roth <michael.roth@amd.com>
+ */
+
+#include <linux/string.h>
+#include <linux/printk.h>
+
+#include <asm/sev-common.h>
+
+struct sev_config sev_cfg __read_mostly;
+
+static int __init init_sev_config(char *str)
+{
+	char *s;
+
+	while ((s = strsep(&str, ","))) {
+		if (!strcmp(s, "debug")) {
+			sev_cfg.debug = true;
+			continue;
+		}
+
+		pr_info("SEV command-line option '%s' was not recognized\n", s);
+	}
+
+	return 1;
+}
+__setup("sev=", init_sev_config);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v5 2/2] x86 KVM:SVM: Provide "nosnp" boot option for sev kernel command line
  2024-09-30 23:11 [PATCH v5 0/2] nosnp sev command line support Pavan Kumar Paluri
  2024-09-30 23:11 ` [PATCH v5 1/2] x86, KVM:SVM: Move sev specific parsing into arch/x86/virt/svm Pavan Kumar Paluri
@ 2024-09-30 23:11 ` Pavan Kumar Paluri
  2024-09-30 23:25 ` [PATCH v5 0/2] nosnp sev command line support Dave Hansen
  2 siblings, 0 replies; 7+ messages in thread
From: Pavan Kumar Paluri @ 2024-09-30 23:11 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-doc, Borislav Petkov, Thomas Gleixner, Ingo Molnar,
	Dave Hansen, Eric Van Tassell, Tom Lendacky, Ashish Kalra,
	Michael Roth, H . Peter Anvin, Peter Zijlstra, Pavan Kumar Paluri

Provide a "nosnp" kernel command line option to prevent enabling of the
RMP and SEV-SNP features in the host/hypervisor. Not initializing the
RMP removes system overhead associated with RMP checks.

Co-developed-by: Eric Van Tassell <Eric.VanTassell@amd.com>
Signed-off-by: Eric Van Tassell <Eric.VanTassell@amd.com>
Signed-off-by: Pavan Kumar Paluri <papaluri@amd.com>
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
---
 Documentation/arch/x86/x86_64/boot-options.rst | 3 +++
 arch/x86/virt/svm/cmdline.c                    | 7 +++++++
 2 files changed, 10 insertions(+)

diff --git a/Documentation/arch/x86/x86_64/boot-options.rst b/Documentation/arch/x86/x86_64/boot-options.rst
index 98d4805f0823..7ae6d882ea52 100644
--- a/Documentation/arch/x86/x86_64/boot-options.rst
+++ b/Documentation/arch/x86/x86_64/boot-options.rst
@@ -305,3 +305,6 @@ The available options are:
 
    debug
      Enable debug messages.
+
+   nosnp
+     Do not enable SEV-SNP (applies to host/hypervisor only).
diff --git a/arch/x86/virt/svm/cmdline.c b/arch/x86/virt/svm/cmdline.c
index 9640507342e0..313415d6f53f 100644
--- a/arch/x86/virt/svm/cmdline.c
+++ b/arch/x86/virt/svm/cmdline.c
@@ -11,6 +11,7 @@
 #include <linux/printk.h>
 
 #include <asm/sev-common.h>
+#include <asm/cpufeature.h>
 
 struct sev_config sev_cfg __read_mostly;
 
@@ -24,6 +25,12 @@ static int __init init_sev_config(char *str)
 			continue;
 		}
 
+		if (!strcmp(s, "nosnp")) {
+			setup_clear_cpu_cap(X86_FEATURE_SEV_SNP);
+			cc_platform_clear(CC_ATTR_HOST_SEV_SNP);
+			continue;
+		}
+
 		pr_info("SEV command-line option '%s' was not recognized\n", s);
 	}
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v5 0/2] nosnp sev command line support
  2024-09-30 23:11 [PATCH v5 0/2] nosnp sev command line support Pavan Kumar Paluri
  2024-09-30 23:11 ` [PATCH v5 1/2] x86, KVM:SVM: Move sev specific parsing into arch/x86/virt/svm Pavan Kumar Paluri
  2024-09-30 23:11 ` [PATCH v5 2/2] x86 KVM:SVM: Provide "nosnp" boot option for sev kernel command line Pavan Kumar Paluri
@ 2024-09-30 23:25 ` Dave Hansen
  2024-10-01  0:09   ` Paluri, PavanKumar
  2 siblings, 1 reply; 7+ messages in thread
From: Dave Hansen @ 2024-09-30 23:25 UTC (permalink / raw)
  To: Pavan Kumar Paluri, linux-kernel
  Cc: linux-doc, Borislav Petkov, Thomas Gleixner, Ingo Molnar,
	Dave Hansen, Eric Van Tassell, Tom Lendacky, Ashish Kalra,
	Michael Roth, H . Peter Anvin, Peter Zijlstra

On 9/30/24 16:11, Pavan Kumar Paluri wrote:
> Provide "nosnp" boot option via "sev=nosnp" kernel command line to
> prevent SEV-SNP[1] capable host kernel from enabling SEV-SNP and
> initializing Reverse Map Table (RMP) [1].
> 
> On providing sev=nosnp via kernel command line:
> cat /sys/module/kvm_amd/parameters/sev_snp should be "N".

I don't see any mention in the changelog, cover letter or Documentation/
about why someone would want to do this.

I assume it's because of performance (walking the RMP table is non-zero
cost).

The BIOS allocates the RMP table, right?  So this option presumably gets
the performance back, but not the memory.  That's probably also worth
mentioning ... somewhere.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v5 0/2] nosnp sev command line support
  2024-09-30 23:25 ` [PATCH v5 0/2] nosnp sev command line support Dave Hansen
@ 2024-10-01  0:09   ` Paluri, PavanKumar
  2024-10-01  0:14     ` Dave Hansen
  0 siblings, 1 reply; 7+ messages in thread
From: Paluri, PavanKumar @ 2024-10-01  0:09 UTC (permalink / raw)
  To: Dave Hansen, linux-kernel
  Cc: linux-doc, Borislav Petkov, Thomas Gleixner, Ingo Molnar,
	Eric Van Tassell, Tom Lendacky, Ashish Kalra, Michael Roth,
	H . Peter Anvin, Peter Zijlstra, Paluri, PavanKumar (Pavan Kumar)

Hello Dave,

On 9/30/2024 6:25 PM, Dave Hansen wrote:
> On 9/30/24 16:11, Pavan Kumar Paluri wrote:
>> Provide "nosnp" boot option via "sev=nosnp" kernel command line to
>> prevent SEV-SNP[1] capable host kernel from enabling SEV-SNP and
>> initializing Reverse Map Table (RMP) [1].
>>
>> On providing sev=nosnp via kernel command line:
>> cat /sys/module/kvm_amd/parameters/sev_snp should be "N".
> 
> I don't see any mention in the changelog, cover letter or Documentation/
> about why someone would want to do this.
> 
> I assume it's because of performance (walking the RMP table is non-zero
> cost).
> 
> The BIOS allocates the RMP table, right?  So this option presumably gets
> the performance back, but not the memory.  That's probably also worth
> mentioning ... somewhere.

Yes, that is correct. RMP is BIOS-allocated, so there is a performance
gain but not memory.

Besides, having a 'nosnp' command line option would benefit customers to
be able to set the BIOS option to allocate RMP, but not actually enable
it just yet. This way, they can avoid overhead incurred from RMP checks,
for when they do not want to run SEV-SNP guests.

I will include this information in the cover-letter.

Thanks,
Pavan

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v5 0/2] nosnp sev command line support
  2024-10-01  0:09   ` Paluri, PavanKumar
@ 2024-10-01  0:14     ` Dave Hansen
  2024-10-01  0:18       ` Paluri, PavanKumar
  0 siblings, 1 reply; 7+ messages in thread
From: Dave Hansen @ 2024-10-01  0:14 UTC (permalink / raw)
  To: Paluri, PavanKumar, linux-kernel
  Cc: linux-doc, Borislav Petkov, Thomas Gleixner, Ingo Molnar,
	Eric Van Tassell, Tom Lendacky, Ashish Kalra, Michael Roth,
	H . Peter Anvin, Peter Zijlstra, Paluri, PavanKumar (Pavan Kumar)

On 9/30/24 17:09, Paluri, PavanKumar wrote:
> I will include this information in the cover-letter.

... and the documentation for the command-line, please

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v5 0/2] nosnp sev command line support
  2024-10-01  0:14     ` Dave Hansen
@ 2024-10-01  0:18       ` Paluri, PavanKumar
  0 siblings, 0 replies; 7+ messages in thread
From: Paluri, PavanKumar @ 2024-10-01  0:18 UTC (permalink / raw)
  To: Dave Hansen, linux-kernel
  Cc: linux-doc, Borislav Petkov, Thomas Gleixner, Ingo Molnar,
	Eric Van Tassell, Tom Lendacky, Ashish Kalra, Michael Roth,
	H . Peter Anvin, Peter Zijlstra, Paluri, PavanKumar (Pavan Kumar)



On 9/30/2024 7:14 PM, Dave Hansen wrote:
> On 9/30/24 17:09, Paluri, PavanKumar wrote:
>> I will include this information in the cover-letter.
> 
> ... and the documentation for the command-line, please

Sure.

Thanks,
Pavan

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-10-01  0:18 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-30 23:11 [PATCH v5 0/2] nosnp sev command line support Pavan Kumar Paluri
2024-09-30 23:11 ` [PATCH v5 1/2] x86, KVM:SVM: Move sev specific parsing into arch/x86/virt/svm Pavan Kumar Paluri
2024-09-30 23:11 ` [PATCH v5 2/2] x86 KVM:SVM: Provide "nosnp" boot option for sev kernel command line Pavan Kumar Paluri
2024-09-30 23:25 ` [PATCH v5 0/2] nosnp sev command line support Dave Hansen
2024-10-01  0:09   ` Paluri, PavanKumar
2024-10-01  0:14     ` Dave Hansen
2024-10-01  0:18       ` Paluri, PavanKumar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox