]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/uv: Retrieve UV secrets sysfs support
authorSteffen Eiden <seiden@linux.ibm.com>
Thu, 24 Oct 2024 06:26:38 +0000 (08:26 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Tue, 29 Oct 2024 10:17:17 +0000 (11:17 +0100)
Reflect the updated content in the query information UVC to the sysfs at
/sys/firmware/query

* new UV-query sysfs entry for the maximum number of retrievable
  secrets the UV can store for one secure guest.
* new UV-query sysfs entry for the maximum number of association
  secrets the UV can store for one secure guest.
* max_secrets contains the sum of max association and max retrievable
  secrets.

Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com>
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
Link: https://lore.kernel.org/r/20241024062638.1465970-7-seiden@linux.ibm.com
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/boot/uv.c
arch/s390/include/asm/uv.h
arch/s390/kernel/uv.c

index 2a71e759dc42c2d52a9e593741f4ae389d7ac5bf..4568e8f81dac1d452351830ec25a55d8e4a1b5cb 100644 (file)
@@ -46,7 +46,8 @@ void uv_query_info(void)
                uv_info.supp_add_secret_req_ver = uvcb.supp_add_secret_req_ver;
                uv_info.supp_add_secret_pcf = uvcb.supp_add_secret_pcf;
                uv_info.supp_secret_types = uvcb.supp_secret_types;
-               uv_info.max_secrets = uvcb.max_secrets;
+               uv_info.max_assoc_secrets = uvcb.max_assoc_secrets;
+               uv_info.max_retr_secrets = uvcb.max_retr_secrets;
        }
 
        if (test_bit_inv(BIT_UVC_CMD_SET_SHARED_ACCESS, (unsigned long *)uvcb.inst_calls_list) &&
index cfd8498f60e81d7213d6abac8edd4343f157fa5b..2da05a9d9dc7d1eb0dd146114acd29a261c3060b 100644 (file)
@@ -145,9 +145,10 @@ struct uv_cb_qui {
        u64 reservedf0;                         /* 0x00f0 */
        u64 supp_add_secret_req_ver;            /* 0x00f8 */
        u64 supp_add_secret_pcf;                /* 0x0100 */
-       u64 supp_secret_types;                  /* 0x0180 */
-       u16 max_secrets;                        /* 0x0110 */
-       u8 reserved112[0x120 - 0x112];          /* 0x0112 */
+       u64 supp_secret_types;                  /* 0x0108 */
+       u16 max_assoc_secrets;                  /* 0x0110 */
+       u16 max_retr_secrets;                   /* 0x0112 */
+       u8 reserved114[0x120 - 0x114];          /* 0x0114 */
 } __packed __aligned(8);
 
 struct uv_key_hash {
@@ -548,7 +549,8 @@ struct uv_info {
        unsigned long supp_add_secret_req_ver;
        unsigned long supp_add_secret_pcf;
        unsigned long supp_secret_types;
-       unsigned short max_secrets;
+       unsigned short max_assoc_secrets;
+       unsigned short max_retr_secrets;
 };
 
 extern struct uv_info uv_info;
index 4fbe63f59ebd14fe7d004ef269efadc5736b2e6f..6f9654a191ad94571cf884c6e5f560903462faa9 100644 (file)
@@ -696,12 +696,32 @@ static struct kobj_attribute uv_query_supp_secret_types_attr =
 static ssize_t uv_query_max_secrets(struct kobject *kobj,
                                    struct kobj_attribute *attr, char *buf)
 {
-       return sysfs_emit(buf, "%d\n", uv_info.max_secrets);
+       return sysfs_emit(buf, "%d\n",
+                         uv_info.max_assoc_secrets + uv_info.max_retr_secrets);
 }
 
 static struct kobj_attribute uv_query_max_secrets_attr =
        __ATTR(max_secrets, 0444, uv_query_max_secrets, NULL);
 
+static ssize_t uv_query_max_retr_secrets(struct kobject *kobj,
+                                        struct kobj_attribute *attr, char *buf)
+{
+       return sysfs_emit(buf, "%d\n", uv_info.max_retr_secrets);
+}
+
+static struct kobj_attribute uv_query_max_retr_secrets_attr =
+       __ATTR(max_retr_secrets, 0444, uv_query_max_retr_secrets, NULL);
+
+static ssize_t uv_query_max_assoc_secrets(struct kobject *kobj,
+                                         struct kobj_attribute *attr,
+                                         char *buf)
+{
+       return sysfs_emit(buf, "%d\n", uv_info.max_assoc_secrets);
+}
+
+static struct kobj_attribute uv_query_max_assoc_secrets_attr =
+       __ATTR(max_assoc_secrets, 0444, uv_query_max_assoc_secrets, NULL);
+
 static struct attribute *uv_query_attrs[] = {
        &uv_query_facilities_attr.attr,
        &uv_query_feature_indications_attr.attr,
@@ -719,6 +739,8 @@ static struct attribute *uv_query_attrs[] = {
        &uv_query_supp_add_secret_pcf_attr.attr,
        &uv_query_supp_secret_types_attr.attr,
        &uv_query_max_secrets_attr.attr,
+       &uv_query_max_assoc_secrets_attr.attr,
+       &uv_query_max_retr_secrets_attr.attr,
        NULL,
 };