On Wed, 23 Feb 2022 09:19:59 +0000 Janosch Frank <frankja@xxxxxxxxxxxxx> wrote: > 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@xxxxxxxxxxxxx> Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > --- > arch/s390/boot/uv.c | 2 ++ > arch/s390/include/asm/uv.h | 7 ++++++- > arch/s390/kernel/uv.c | 20 ++++++++++++++++++++ > 3 files changed, 28 insertions(+), 1 deletion(-) > > diff --git a/arch/s390/boot/uv.c b/arch/s390/boot/uv.c > index e6be155ab2e5..b100b57cf15d 100644 > --- a/arch/s390/boot/uv.c > +++ b/arch/s390/boot/uv.c > @@ -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 > diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h > index 86218382d29c..7d6c78b61bf2 100644 > --- a/arch/s390/include/asm/uv.h > +++ b/arch/s390/include/asm/uv.h > @@ -107,7 +107,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 */ > @@ -285,6 +288,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; > diff --git a/arch/s390/kernel/uv.c b/arch/s390/kernel/uv.c > index a5425075dd25..852840384e75 100644 > --- a/arch/s390/kernel/uv.c > +++ b/arch/s390/kernel/uv.c > @@ -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, > }; >