Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

s390/uv: Retrieve UV secrets sysfs support

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>

authored by

Steffen Eiden and committed by
Heiko Carstens
f00469a6 d3561371

+31 -6
+2 -1
arch/s390/boot/uv.c
··· 46 46 uv_info.supp_add_secret_req_ver = uvcb.supp_add_secret_req_ver; 47 47 uv_info.supp_add_secret_pcf = uvcb.supp_add_secret_pcf; 48 48 uv_info.supp_secret_types = uvcb.supp_secret_types; 49 - uv_info.max_secrets = uvcb.max_secrets; 49 + uv_info.max_assoc_secrets = uvcb.max_assoc_secrets; 50 + uv_info.max_retr_secrets = uvcb.max_retr_secrets; 50 51 } 51 52 52 53 if (test_bit_inv(BIT_UVC_CMD_SET_SHARED_ACCESS, (unsigned long *)uvcb.inst_calls_list) &&
+6 -4
arch/s390/include/asm/uv.h
··· 145 145 u64 reservedf0; /* 0x00f0 */ 146 146 u64 supp_add_secret_req_ver; /* 0x00f8 */ 147 147 u64 supp_add_secret_pcf; /* 0x0100 */ 148 - u64 supp_secret_types; /* 0x0180 */ 149 - u16 max_secrets; /* 0x0110 */ 150 - u8 reserved112[0x120 - 0x112]; /* 0x0112 */ 148 + u64 supp_secret_types; /* 0x0108 */ 149 + u16 max_assoc_secrets; /* 0x0110 */ 150 + u16 max_retr_secrets; /* 0x0112 */ 151 + u8 reserved114[0x120 - 0x114]; /* 0x0114 */ 151 152 } __packed __aligned(8); 152 153 153 154 struct uv_key_hash { ··· 549 548 unsigned long supp_add_secret_req_ver; 550 549 unsigned long supp_add_secret_pcf; 551 550 unsigned long supp_secret_types; 552 - unsigned short max_secrets; 551 + unsigned short max_assoc_secrets; 552 + unsigned short max_retr_secrets; 553 553 }; 554 554 555 555 extern struct uv_info uv_info;
+23 -1
arch/s390/kernel/uv.c
··· 696 696 static ssize_t uv_query_max_secrets(struct kobject *kobj, 697 697 struct kobj_attribute *attr, char *buf) 698 698 { 699 - return sysfs_emit(buf, "%d\n", uv_info.max_secrets); 699 + return sysfs_emit(buf, "%d\n", 700 + uv_info.max_assoc_secrets + uv_info.max_retr_secrets); 700 701 } 701 702 702 703 static struct kobj_attribute uv_query_max_secrets_attr = 703 704 __ATTR(max_secrets, 0444, uv_query_max_secrets, NULL); 705 + 706 + static ssize_t uv_query_max_retr_secrets(struct kobject *kobj, 707 + struct kobj_attribute *attr, char *buf) 708 + { 709 + return sysfs_emit(buf, "%d\n", uv_info.max_retr_secrets); 710 + } 711 + 712 + static struct kobj_attribute uv_query_max_retr_secrets_attr = 713 + __ATTR(max_retr_secrets, 0444, uv_query_max_retr_secrets, NULL); 714 + 715 + static ssize_t uv_query_max_assoc_secrets(struct kobject *kobj, 716 + struct kobj_attribute *attr, 717 + char *buf) 718 + { 719 + return sysfs_emit(buf, "%d\n", uv_info.max_assoc_secrets); 720 + } 721 + 722 + static struct kobj_attribute uv_query_max_assoc_secrets_attr = 723 + __ATTR(max_assoc_secrets, 0444, uv_query_max_assoc_secrets, NULL); 704 724 705 725 static struct attribute *uv_query_attrs[] = { 706 726 &uv_query_facilities_attr.attr, ··· 739 719 &uv_query_supp_add_secret_pcf_attr.attr, 740 720 &uv_query_supp_secret_types_attr.attr, 741 721 &uv_query_max_secrets_attr.attr, 722 + &uv_query_max_assoc_secrets_attr.attr, 723 + &uv_query_max_retr_secrets_attr.attr, 742 724 NULL, 743 725 }; 744 726