Petr Tesarik 9431c4
From: Janosch Frank <frankja@linux.ibm.com>
Petr Tesarik 9431c4
Date: Tue, 17 May 2022 16:36:19 +0000
Petr Tesarik 9431c4
Subject: s390/uv: Add SE hdr query information
Petr Tesarik 9431c4
Git-commit: ac640db3a0260541058e95e4acd249cc166cb0eb
Petr Tesarik 9431c4
Patch-mainline: v6.0-rc1
Petr Tesarik 9431c4
References: jsc#PED-622
Petr Tesarik 9431c4
Petr Tesarik 9431c4
We have information about the supported se header version and pcf bits
Petr Tesarik 9431c4
so let's expose it via the sysfs files.
Petr Tesarik 9431c4
Petr Tesarik 9431c4
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Petr Tesarik 9431c4
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Petr Tesarik 9431c4
Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
Petr Tesarik 9431c4
Link: https://lore.kernel.org/r/20220517163629.3443-2-frankja@linux.ibm.com
Petr Tesarik 9431c4
Message-Id: <20220517163629.3443-2-frankja@linux.ibm.com>
Petr Tesarik 9431c4
Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Petr Tesarik 9431c4
Acked-by: Petr Tesarik <ptesarik@suse.com>
Petr Tesarik 9431c4
---
Petr Tesarik 9431c4
 arch/s390/boot/uv.c        |    2 ++
Petr Tesarik 9431c4
 arch/s390/include/asm/uv.h |    7 ++++++-
Petr Tesarik 9431c4
 arch/s390/kernel/uv.c      |   20 ++++++++++++++++++++
Petr Tesarik 9431c4
 3 files changed, 28 insertions(+), 1 deletion(-)
Petr Tesarik 9431c4
Petr Tesarik 9431c4
--- a/arch/s390/boot/uv.c
Petr Tesarik 9431c4
+++ b/arch/s390/boot/uv.c
Petr Tesarik 9431c4
@@ -41,6 +41,8 @@ void uv_query_info(void)
Petr Tesarik 9431c4
 		uv_info.max_num_sec_conf = uvcb.max_num_sec_conf;
Petr Tesarik 9431c4
 		uv_info.max_guest_cpu_id = uvcb.max_guest_cpu_id;
Petr Tesarik 9431c4
 		uv_info.uv_feature_indications = uvcb.uv_feature_indications;
Petr Tesarik 9431c4
+		uv_info.supp_se_hdr_ver = uvcb.supp_se_hdr_versions;
Petr Tesarik 9431c4
+		uv_info.supp_se_hdr_pcf = uvcb.supp_se_hdr_pcf;
Petr Tesarik 9431c4
 	}
Petr Tesarik 9431c4
 
Petr Tesarik 9431c4
 #ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST
Petr Tesarik 9431c4
--- a/arch/s390/include/asm/uv.h
Petr Tesarik 9431c4
+++ b/arch/s390/include/asm/uv.h
Petr Tesarik 9431c4
@@ -109,7 +109,10 @@ struct uv_cb_qui {
Petr Tesarik 9431c4
 	u8  reserved88[158 - 136];		/* 0x0088 */
Petr Tesarik 9431c4
 	u16 max_guest_cpu_id;			/* 0x009e */
Petr Tesarik 9431c4
 	u64 uv_feature_indications;		/* 0x00a0 */
Petr Tesarik 9431c4
-	u8  reserveda8[200 - 168];		/* 0x00a8 */
Petr Tesarik 9431c4
+	u64 reserveda8;				/* 0x00a8 */
Petr Tesarik 9431c4
+	u64 supp_se_hdr_versions;		/* 0x00b0 */
Petr Tesarik 9431c4
+	u64 supp_se_hdr_pcf;			/* 0x00b8 */
Petr Tesarik 9431c4
+	u64 reservedc0;				/* 0x00c0 */
Petr Tesarik 9431c4
 } __packed __aligned(8);
Petr Tesarik 9431c4
 
Petr Tesarik 9431c4
 /* Initialize Ultravisor */
Petr Tesarik 9431c4
@@ -306,6 +309,8 @@ struct uv_info {
Petr Tesarik 9431c4
 	unsigned int max_num_sec_conf;
Petr Tesarik 9431c4
 	unsigned short max_guest_cpu_id;
Petr Tesarik 9431c4
 	unsigned long uv_feature_indications;
Petr Tesarik 9431c4
+	unsigned long supp_se_hdr_ver;
Petr Tesarik 9431c4
+	unsigned long supp_se_hdr_pcf;
Petr Tesarik 9431c4
 };
Petr Tesarik 9431c4
 
Petr Tesarik 9431c4
 extern struct uv_info uv_info;
Petr Tesarik 9431c4
--- a/arch/s390/kernel/uv.c
Petr Tesarik 9431c4
+++ b/arch/s390/kernel/uv.c
Petr Tesarik 9431c4
@@ -360,6 +360,24 @@ static ssize_t uv_query_facilities(struc
Petr Tesarik 9431c4
 static struct kobj_attribute uv_query_facilities_attr =
Petr Tesarik 9431c4
 	__ATTR(facilities, 0444, uv_query_facilities, NULL);
Petr Tesarik 9431c4
 
Petr Tesarik 9431c4
+static ssize_t uv_query_supp_se_hdr_ver(struct kobject *kobj,
Petr Tesarik 9431c4
+					struct kobj_attribute *attr, char *buf)
Petr Tesarik 9431c4
+{
Petr Tesarik 9431c4
+	return sysfs_emit(buf, "%lx\n", uv_info.supp_se_hdr_ver);
Petr Tesarik 9431c4
+}
Petr Tesarik 9431c4
+
Petr Tesarik 9431c4
+static struct kobj_attribute uv_query_supp_se_hdr_ver_attr =
Petr Tesarik 9431c4
+	__ATTR(supp_se_hdr_ver, 0444, uv_query_supp_se_hdr_ver, NULL);
Petr Tesarik 9431c4
+
Petr Tesarik 9431c4
+static ssize_t uv_query_supp_se_hdr_pcf(struct kobject *kobj,
Petr Tesarik 9431c4
+					struct kobj_attribute *attr, char *buf)
Petr Tesarik 9431c4
+{
Petr Tesarik 9431c4
+	return sysfs_emit(buf, "%lx\n", uv_info.supp_se_hdr_pcf);
Petr Tesarik 9431c4
+}
Petr Tesarik 9431c4
+
Petr Tesarik 9431c4
+static struct kobj_attribute uv_query_supp_se_hdr_pcf_attr =
Petr Tesarik 9431c4
+	__ATTR(supp_se_hdr_pcf, 0444, uv_query_supp_se_hdr_pcf, NULL);
Petr Tesarik 9431c4
+
Petr Tesarik 9431c4
 static ssize_t uv_query_feature_indications(struct kobject *kobj,
Petr Tesarik 9431c4
 					    struct kobj_attribute *attr, char *buf)
Petr Tesarik 9431c4
 {
Petr Tesarik 9431c4
@@ -405,6 +423,8 @@ static struct attribute *uv_query_attrs[
Petr Tesarik 9431c4
 	&uv_query_max_guest_cpus_attr.attr,
Petr Tesarik 9431c4
 	&uv_query_max_guest_vms_attr.attr,
Petr Tesarik 9431c4
 	&uv_query_max_guest_addr_attr.attr,
Petr Tesarik 9431c4
+	&uv_query_supp_se_hdr_ver_attr.attr,
Petr Tesarik 9431c4
+	&uv_query_supp_se_hdr_pcf_attr.attr,
Petr Tesarik 9431c4
 	NULL,
Petr Tesarik 9431c4
 };
Petr Tesarik 9431c4