s390/uv: Add dump fields to query
authorJanosch Frank <frankja@linux.ibm.com>
Tue, 17 May 2022 16:36:20 +0000 (16:36 +0000)
committerChristian Borntraeger <borntraeger@linux.ibm.com>
Wed, 1 Jun 2022 14:57:14 +0000 (16:57 +0200)
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@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-3-frankja@linux.ibm.com
Message-Id: <20220517163629.3443-3-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 b100b57cf15db752909e46b3a49a5c2598415df4..67c737c1e58083ef0290ca042261c9706af9fb59 100644 (file)
@@ -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
index 46498b8c587b40585541a3f9d84fedde88511d2b..e8257a293dd1778ee60f819180d143df204342ab 100644 (file)
@@ -114,6 +114,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 */
@@ -312,6 +315,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;
index 852840384e755f6a50a93fe7bc6cd1ed648adade..84fe33b6af4d3d3c8853fddfd0cf2453365b6f28 100644 (file)
@@ -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,
 };