From: Borislav Petkov <bp@alien8.de>
To: X86 ML <x86@kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>, KVM <kvm@vger.kernel.org>,
Ashish Kalra <ashish.kalra@amd.com>,
Joerg Roedel <joro@8bytes.org>,
Michael Roth <michael.roth@amd.com>,
Tom Lendacky <thomas.lendacky@amd.com>
Subject: [PATCH 4/5] x86/cc: Add cc_platform_set/_clear() helpers
Date: Wed, 27 Mar 2024 16:43:16 +0100 [thread overview]
Message-ID: <20240327154317.29909-5-bp@alien8.de> (raw)
In-Reply-To: <20240327154317.29909-1-bp@alien8.de>
From: "Borislav Petkov (AMD)" <bp@alien8.de>
Add functionality to set and/or clear different attributes of the
machine as a confidential computing platform. Add the first one too:
whether the machine is running as a host for SEV-SNP guests.
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
---
arch/x86/coco/core.c | 52 +++++++++++++++++++++++++++++++++++++
include/linux/cc_platform.h | 12 +++++++++
2 files changed, 64 insertions(+)
diff --git a/arch/x86/coco/core.c b/arch/x86/coco/core.c
index d07be9d05cd0..8c3fae23d3c6 100644
--- a/arch/x86/coco/core.c
+++ b/arch/x86/coco/core.c
@@ -16,6 +16,11 @@
enum cc_vendor cc_vendor __ro_after_init = CC_VENDOR_NONE;
u64 cc_mask __ro_after_init;
+static struct cc_attr_flags {
+ __u64 host_sev_snp : 1,
+ __resv : 63;
+} cc_flags;
+
static bool noinstr intel_cc_platform_has(enum cc_attr attr)
{
switch (attr) {
@@ -89,6 +94,9 @@ static bool noinstr amd_cc_platform_has(enum cc_attr attr)
case CC_ATTR_GUEST_SEV_SNP:
return sev_status & MSR_AMD64_SEV_SNP_ENABLED;
+ case CC_ATTR_HOST_SEV_SNP:
+ return cc_flags.host_sev_snp;
+
default:
return false;
}
@@ -148,3 +156,47 @@ u64 cc_mkdec(u64 val)
}
}
EXPORT_SYMBOL_GPL(cc_mkdec);
+
+static void amd_cc_platform_clear(enum cc_attr attr)
+{
+ switch (attr) {
+ case CC_ATTR_HOST_SEV_SNP:
+ cc_flags.host_sev_snp = 0;
+ break;
+ default:
+ break;
+ }
+}
+
+void cc_platform_clear(enum cc_attr attr)
+{
+ switch (cc_vendor) {
+ case CC_VENDOR_AMD:
+ amd_cc_platform_clear(attr);
+ break;
+ default:
+ break;
+ }
+}
+
+static void amd_cc_platform_set(enum cc_attr attr)
+{
+ switch (attr) {
+ case CC_ATTR_HOST_SEV_SNP:
+ cc_flags.host_sev_snp = 1;
+ break;
+ default:
+ break;
+ }
+}
+
+void cc_platform_set(enum cc_attr attr)
+{
+ switch (cc_vendor) {
+ case CC_VENDOR_AMD:
+ amd_cc_platform_set(attr);
+ break;
+ default:
+ break;
+ }
+}
diff --git a/include/linux/cc_platform.h b/include/linux/cc_platform.h
index cb0d6cd1c12f..60693a145894 100644
--- a/include/linux/cc_platform.h
+++ b/include/linux/cc_platform.h
@@ -90,6 +90,14 @@ enum cc_attr {
* Examples include TDX Guest.
*/
CC_ATTR_HOTPLUG_DISABLED,
+
+ /**
+ * @CC_ATTR_HOST_SEV_SNP: AMD SNP enabled on the host.
+ *
+ * The host kernel is running with the necessary features
+ * enabled to run SEV-SNP guests.
+ */
+ CC_ATTR_HOST_SEV_SNP,
};
#ifdef CONFIG_ARCH_HAS_CC_PLATFORM
@@ -107,10 +115,14 @@ enum cc_attr {
* * FALSE - Specified Confidential Computing attribute is not active
*/
bool cc_platform_has(enum cc_attr attr);
+void cc_platform_set(enum cc_attr attr);
+void cc_platform_clear(enum cc_attr attr);
#else /* !CONFIG_ARCH_HAS_CC_PLATFORM */
static inline bool cc_platform_has(enum cc_attr attr) { return false; }
+static inline void cc_platform_set(enum cc_attr attr) { }
+static inline void cc_platform_clear(enum cc_attr attr) { }
#endif /* CONFIG_ARCH_HAS_CC_PLATFORM */
--
2.43.0
next prev parent reply other threads:[~2024-03-27 15:44 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-27 15:43 [PATCH 0/5] x86/sev: Fix SNP host late disable Borislav Petkov
2024-03-27 15:43 ` [PATCH 1/5] x86/alternatives: Remove a superfluous newline in _static_cpu_has() Borislav Petkov
2024-04-04 9:11 ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-04-04 10:16 ` tip-bot2 for Borislav Petkov (AMD)
2024-04-09 17:11 ` [tip: x86/asm] " tip-bot2 for Borislav Petkov (AMD)
2024-03-27 15:43 ` [PATCH 2/5] x86/alternatives: Catch late X86_FEATURE modifiers Borislav Petkov
2024-03-27 15:57 ` Nikolay Borisov
2024-04-03 17:59 ` Borislav Petkov
2024-04-04 9:11 ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-04-04 10:16 ` tip-bot2 for Borislav Petkov (AMD)
2024-04-09 17:11 ` tip-bot2 for Borislav Petkov (AMD)
2024-03-27 15:43 ` [PATCH 3/5] x86/kvm/Kconfig: Have KVM_AMD_SEV select ARCH_HAS_CC_PLATFORM Borislav Petkov
2024-03-29 14:42 ` Tom Lendacky
2024-04-04 9:11 ` [tip: x86/urgent] " tip-bot2 for Borislav Petkov (AMD)
2024-03-27 15:43 ` Borislav Petkov [this message]
2024-03-29 14:46 ` [PATCH 4/5] x86/cc: Add cc_platform_set/_clear() helpers Tom Lendacky
2024-04-04 9:11 ` [tip: x86/urgent] " tip-bot2 for Borislav Petkov (AMD)
2024-03-27 15:43 ` [PATCH 5/5] x86/CPU/AMD: Track SNP host status with cc_platform_*() Borislav Petkov
2024-03-28 11:51 ` Jeremi Piotrowski
2024-03-28 13:41 ` Borislav Petkov
2024-03-28 14:24 ` Jeremi Piotrowski
2024-03-28 15:39 ` Borislav Petkov
2024-04-04 17:07 ` Jeremi Piotrowski
2024-04-24 18:46 ` Borislav Petkov
2024-03-29 14:52 ` Tom Lendacky
2024-04-04 9:11 ` [tip: x86/urgent] " tip-bot2 for Borislav Petkov (AMD)
2024-04-03 4:15 ` [PATCH 0/5] x86/sev: Fix SNP host late disable Aithal, Srikanth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240327154317.29909-5-bp@alien8.de \
--to=bp@alien8.de \
--cc=ashish.kalra@amd.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.roth@amd.com \
--cc=thomas.lendacky@amd.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox