On Wed, 23 Feb 2022 09:20:00 +0000 Janosch Frank <frankja@xxxxxxxxxxxxx> wrote: > The new dump feature requires us to know how much memory is needed for > the "dump storage state" and "dump finalize" ultravisor call. These > values are reported via the UV query call. > > Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx> Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> I would squash this into the previous patch, though > --- > arch/s390/boot/uv.c | 2 ++ > arch/s390/include/asm/uv.h | 5 +++++ > arch/s390/kernel/uv.c | 33 +++++++++++++++++++++++++++++++++ > 3 files changed, 40 insertions(+) > > diff --git a/arch/s390/boot/uv.c b/arch/s390/boot/uv.c > index b100b57cf15d..67c737c1e580 100644 > --- a/arch/s390/boot/uv.c > +++ b/arch/s390/boot/uv.c > @@ -43,6 +43,8 @@ void uv_query_info(void) > 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; > + uv_info.conf_dump_storage_state_len = uvcb.conf_dump_storage_state_len; > + uv_info.conf_dump_finalize_len = uvcb.conf_dump_finalize_len; > } > > #ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST > diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h > index 7d6c78b61bf2..b79e516d4424 100644 > --- a/arch/s390/include/asm/uv.h > +++ b/arch/s390/include/asm/uv.h > @@ -111,6 +111,9 @@ struct uv_cb_qui { > u64 supp_se_hdr_versions; /* 0x00b0 */ > u64 supp_se_hdr_pcf; /* 0x00b8 */ > u64 reservedc0; /* 0x00c0 */ > + u64 conf_dump_storage_state_len; /* 0x00c8 */ > + u64 conf_dump_finalize_len; /* 0x00d0 */ > + u8 reservedd8[256 - 216]; /* 0x00d8 */ > } __packed __aligned(8); > > /* Initialize Ultravisor */ > @@ -290,6 +293,8 @@ struct uv_info { > unsigned long uv_feature_indications; > unsigned long supp_se_hdr_ver; > unsigned long supp_se_hdr_pcf; > + unsigned long conf_dump_storage_state_len; > + unsigned long conf_dump_finalize_len; > }; > > extern struct uv_info uv_info; > diff --git a/arch/s390/kernel/uv.c b/arch/s390/kernel/uv.c > index 852840384e75..84fe33b6af4d 100644 > --- a/arch/s390/kernel/uv.c > +++ b/arch/s390/kernel/uv.c > @@ -410,6 +410,36 @@ static ssize_t uv_query_supp_se_hdr_pcf(struct kobject *kobj, > 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_dump_cpu_len(struct kobject *kobj, > + struct kobj_attribute *attr, char *page) > +{ > + return scnprintf(page, PAGE_SIZE, "%lx\n", > + uv_info.guest_cpu_stor_len); > +} > + > +static struct kobj_attribute uv_query_dump_cpu_len_attr = > + __ATTR(uv_query_dump_cpu_len, 0444, uv_query_dump_cpu_len, NULL); > + > +static ssize_t uv_query_dump_storage_state_len(struct kobject *kobj, > + struct kobj_attribute *attr, char *page) > +{ > + return scnprintf(page, PAGE_SIZE, "%lx\n", > + uv_info.conf_dump_storage_state_len); > +} > + > +static struct kobj_attribute uv_query_dump_storage_state_len_attr = > + __ATTR(dump_storage_state_len, 0444, uv_query_dump_storage_state_len, NULL); > + > +static ssize_t uv_query_dump_finalize_len(struct kobject *kobj, > + struct kobj_attribute *attr, char *page) > +{ > + return scnprintf(page, PAGE_SIZE, "%lx\n", > + uv_info.conf_dump_finalize_len); > +} > + > +static struct kobj_attribute uv_query_dump_finalize_len_attr = > + __ATTR(dump_finalize_len, 0444, uv_query_dump_finalize_len, NULL); > + > static ssize_t uv_query_feature_indications(struct kobject *kobj, > struct kobj_attribute *attr, char *buf) > { > @@ -457,6 +487,9 @@ static struct attribute *uv_query_attrs[] = { > &uv_query_max_guest_addr_attr.attr, > &uv_query_supp_se_hdr_ver_attr.attr, > &uv_query_supp_se_hdr_pcf_attr.attr, > + &uv_query_dump_storage_state_len_attr.attr, > + &uv_query_dump_finalize_len_attr.attr, > + &uv_query_dump_cpu_len_attr.attr, > NULL, > }; >