[PATCH 2/3] x86/sev: Create /sys/devices/system/cpu/sev/ for all SEV guests
From: Jörg Rödel
Date: Mon Aug 03 2026 - 09:14:22 EST
From: Joerg Roedel <joerg.roedel@xxxxxxx>
The SYSFS directory for SEV is only created for SEV-SNP guests right
now. Change it to create it for SEV and SEV-ES guests as well so
attributes available on all versions of SEV have a place.
Signed-off-by: Joerg Roedel <joerg.roedel@xxxxxxx>
---
.../ABI/testing/sysfs-devices-system-cpu | 5 ++--
arch/x86/coco/sev/core.c | 29 ++++++++++++-------
2 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-devices-system-cpu b/Documentation/ABI/testing/sysfs-devices-system-cpu
index 82d10d556cc8..63586e299aa8 100644
--- a/Documentation/ABI/testing/sysfs-devices-system-cpu
+++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
@@ -694,10 +694,11 @@ Date: May 2024
Contact: Linux kernel mailing list <linux-kernel@xxxxxxxxxxxxxxx>
Description: Secure Encrypted Virtualization (SEV) information
- This directory is only present when running as an SEV-SNP guest.
+ This directory is only present when running as an SEV guest.
vmpl: Reports the Virtual Machine Privilege Level (VMPL) at which
- the SEV-SNP guest is running.
+ the SEV-SNP guest is running. This file is only present
+ when running as an SEV-SNP guest.
What: /sys/devices/system/cpu/svm
diff --git a/arch/x86/coco/sev/core.c b/arch/x86/coco/sev/core.c
index ecd77d3217f3..5770b99feb9b 100644
--- a/arch/x86/coco/sev/core.c
+++ b/arch/x86/coco/sev/core.c
@@ -1433,14 +1433,7 @@ static ssize_t vmpl_show(struct kobject *kobj,
static struct kobj_attribute vmpl_attr = __ATTR_RO(vmpl);
-static struct attribute *vmpl_attrs[] = {
- &vmpl_attr.attr,
- NULL
-};
-
-static struct attribute_group sev_attr_group = {
- .attrs = vmpl_attrs,
-};
+static struct attribute_group sev_attr_group = {};
static int __init sev_sysfs_init(void)
{
@@ -1448,7 +1441,7 @@ static int __init sev_sysfs_init(void)
struct device *dev_root;
int ret;
- if (!cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
+ if (!cc_platform_has(CC_ATTR_GUEST_SEV))
return -ENODEV;
dev_root = bus_get_dev_root(&cpu_subsys);
@@ -1463,9 +1456,25 @@ static int __init sev_sysfs_init(void)
ret = sysfs_create_group(sev_kobj, &sev_attr_group);
if (ret)
- kobject_put(sev_kobj);
+ goto drop_kobj;
+
+ /* Add SEV-SNP specific attributes */
+ if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP)) {
+ /* VMPL */
+ ret = sysfs_add_file_to_group(sev_kobj, &vmpl_attr.attr, NULL);
+ if (ret)
+ goto drop_sysfs;
+ }
+
+ return 0;
+
+drop_sysfs:
+ sysfs_remove_group(sev_kobj, &sev_attr_group);
+drop_kobj:
+ kobject_put(sev_kobj);
return ret;
+
}
arch_initcall(sev_sysfs_init);
#endif // CONFIG_SYSFS
--
2.53.0