s390/uv: Add SE hdr query information
authorJanosch Frank <frankja@linux.ibm.com>
Tue, 17 May 2022 16:36:19 +0000 (16:36 +0000)
committerChristian Borntraeger <borntraeger@linux.ibm.com>
Wed, 1 Jun 2022 14:57:14 +0000 (16:57 +0200)
We have information about the supported se header version and pcf bits
so let's expose it via the sysfs files.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
Link: https://lore.kernel.org/r/20220517163629.3443-2-frankja@linux.ibm.com
Message-Id: <20220517163629.3443-2-frankja@linux.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
arch/s390/boot/uv.c
arch/s390/include/asm/uv.h
arch/s390/kernel/uv.c

index e6be155ab2e52a4dc82dfd5d702349eb85a7248c..b100b57cf15db752909e46b3a49a5c2598415df4 100644 (file)
@@ -41,6 +41,8 @@ void uv_query_info(void)
                uv_info.max_num_sec_conf = uvcb.max_num_sec_conf;
                uv_info.max_guest_cpu_id = uvcb.max_guest_cpu_id;
                uv_info.uv_feature_indications = uvcb.uv_feature_indications;
+               uv_info.supp_se_hdr_ver = uvcb.supp_se_hdr_versions;
+               uv_info.supp_se_hdr_pcf = uvcb.supp_se_hdr_pcf;
        }
 
 #ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST
index cfea7b77a5b8276b65cff4bccb9e12114da1c21a..46498b8c587b40585541a3f9d84fedde88511d2b 100644 (file)
@@ -110,7 +110,10 @@ struct uv_cb_qui {
        u8  reserved88[158 - 136];              /* 0x0088 */
        u16 max_guest_cpu_id;                   /* 0x009e */
        u64 uv_feature_indications;             /* 0x00a0 */
-       u8  reserveda8[200 - 168];              /* 0x00a8 */
+       u64 reserveda8;                         /* 0x00a8 */
+       u64 supp_se_hdr_versions;               /* 0x00b0 */
+       u64 supp_se_hdr_pcf;                    /* 0x00b8 */
+       u64 reservedc0;                         /* 0x00c0 */
 } __packed __aligned(8);
 
 /* Initialize Ultravisor */
@@ -307,6 +310,8 @@ struct uv_info {
        unsigned int max_num_sec_conf;
        unsigned short max_guest_cpu_id;
        unsigned long uv_feature_indications;
+       unsigned long supp_se_hdr_ver;
+       unsigned long supp_se_hdr_pcf;
 };
 
 extern struct uv_info uv_info;
index a5425075dd255d61ffc0353a72e62c512dec961d..852840384e755f6a50a93fe7bc6cd1ed648adade 100644 (file)
@@ -392,6 +392,24 @@ static ssize_t uv_query_facilities(struct kobject *kobj,
 static struct kobj_attribute uv_query_facilities_attr =
        __ATTR(facilities, 0444, uv_query_facilities, NULL);
 
+static ssize_t uv_query_supp_se_hdr_ver(struct kobject *kobj,
+                                       struct kobj_attribute *attr, char *buf)
+{
+       return sysfs_emit(buf, "%lx\n", uv_info.supp_se_hdr_ver);
+}
+
+static struct kobj_attribute uv_query_supp_se_hdr_ver_attr =
+       __ATTR(supp_se_hdr_ver, 0444, uv_query_supp_se_hdr_ver, NULL);
+
+static ssize_t uv_query_supp_se_hdr_pcf(struct kobject *kobj,
+                                       struct kobj_attribute *attr, char *buf)
+{
+       return sysfs_emit(buf, "%lx\n", uv_info.supp_se_hdr_pcf);
+}
+
+static struct kobj_attribute uv_query_supp_se_hdr_pcf_attr =
+       __ATTR(supp_se_hdr_pcf, 0444, uv_query_supp_se_hdr_pcf, NULL);
+
 static ssize_t uv_query_feature_indications(struct kobject *kobj,
                                            struct kobj_attribute *attr, char *buf)
 {
@@ -437,6 +455,8 @@ static struct attribute *uv_query_attrs[] = {
        &uv_query_max_guest_cpus_attr.attr,
        &uv_query_max_guest_vms_attr.attr,
        &uv_query_max_guest_addr_attr.attr,
+       &uv_query_supp_se_hdr_ver_attr.attr,
+       &uv_query_supp_se_hdr_pcf_attr.attr,
        NULL,
 };