x86/virt: Provide "nosnp" boot option for sev kernel command line
authorPavan Kumar Paluri <papaluri@amd.com>
Mon, 14 Oct 2024 13:09:48 +0000 (08:09 -0500)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 15 Oct 2024 18:22:18 +0000 (20:22 +0200)
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.

  [ bp: Actually make it a HV-only cmdline option. ]

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>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
Link: https://lore.kernel.org/r/20241014130948.1476946-3-papaluri@amd.com
Documentation/arch/x86/x86_64/boot-options.rst
arch/x86/virt/svm/cmdline.c

index 98d4805f0823a1a08f69133ca6f39155a0dd9cf0..d69e3cfbdba5a5d788f39f794c92de50160da37b 100644 (file)
@@ -305,3 +305,8 @@ The available options are:
 
    debug
      Enable debug messages.
+
+   nosnp
+     Do not enable SEV-SNP (applies to host/hypervisor only). Setting
+     'nosnp' avoids the RMP check overhead in memory accesses when
+     users do not want to run SEV-SNP guests.
index add4bae3ebef50d860eb9bf6ffdf5b91f00936b3..affa2759fa20ae743796c246ab585bc9fff5e44e 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/string.h>
 #include <linux/printk.h>
 #include <linux/cache.h>
+#include <linux/cpufeature.h>
 
 #include <asm/sev-common.h>
 
@@ -25,6 +26,17 @@ static int __init init_sev_config(char *str)
                        continue;
                }
 
+               if (!strcmp(s, "nosnp")) {
+                       if (!cpu_feature_enabled(X86_FEATURE_HYPERVISOR)) {
+                               setup_clear_cpu_cap(X86_FEATURE_SEV_SNP);
+                               cc_platform_clear(CC_ATTR_HOST_SEV_SNP);
+                               continue;
+                       } else {
+                               goto warn;
+                       }
+               }
+
+warn:
                pr_info("SEV command-line option '%s' was not recognized\n", s);
        }