]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/sysinfo: add variable capacity information
authorVasily Gorbik <gor@linux.ibm.com>
Wed, 19 Jan 2022 22:44:32 +0000 (23:44 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Wed, 22 Nov 2023 13:07:28 +0000 (14:07 +0100)
If available, add machine variable capacity information to /proc/sysinfo

Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/include/asm/sysinfo.h
arch/s390/kernel/sysinfo.c

index ab1c6316055c20908aa1ca6bc8f7291df1b0fd50..edca5a751df412c6702fdf377b716dfe3e853ed2 100644 (file)
@@ -40,6 +40,10 @@ struct sysinfo_1_1_1 {
        unsigned int ncr;
        unsigned int npr;
        unsigned int ntr;
+       char reserved_3[4];
+       char model_var_cap[16];
+       unsigned int model_var_cap_rating;
+       unsigned int nvr;
 };
 
 struct sysinfo_1_2_1 {
index b5e364358ce43a23cd5da8ca5f57e4e8691cce95..f6f8f498c9be3959a433ffd7c1241ed6af663a2c 100644 (file)
@@ -81,10 +81,12 @@ static bool convert_ext_name(unsigned char encoding, char *name, size_t len)
 
 static void stsi_1_1_1(struct seq_file *m, struct sysinfo_1_1_1 *info)
 {
+       bool has_var_cap;
        int i;
 
        if (stsi(info, 1, 1, 1))
                return;
+       has_var_cap = !!info->model_var_cap[0];
        EBCASC(info->manufacturer, sizeof(info->manufacturer));
        EBCASC(info->type, sizeof(info->type));
        EBCASC(info->model, sizeof(info->model));
@@ -93,6 +95,8 @@ static void stsi_1_1_1(struct seq_file *m, struct sysinfo_1_1_1 *info)
        EBCASC(info->model_capacity, sizeof(info->model_capacity));
        EBCASC(info->model_perm_cap, sizeof(info->model_perm_cap));
        EBCASC(info->model_temp_cap, sizeof(info->model_temp_cap));
+       if (has_var_cap)
+               EBCASC(info->model_var_cap, sizeof(info->model_var_cap));
        seq_printf(m, "Manufacturer:         %-16.16s\n", info->manufacturer);
        seq_printf(m, "Type:                 %-4.4s\n", info->type);
        if (info->lic)
@@ -120,12 +124,18 @@ static void stsi_1_1_1(struct seq_file *m, struct sysinfo_1_1_1 *info)
                seq_printf(m, "Model Temp. Capacity: %-16.16s %08u\n",
                           info->model_temp_cap,
                           info->model_temp_cap_rating);
+       if (has_var_cap && info->model_var_cap_rating)
+               seq_printf(m, "Model Var. Capacity:  %-16.16s %08u\n",
+                          info->model_var_cap,
+                          info->model_var_cap_rating);
        if (info->ncr)
                seq_printf(m, "Nominal Cap. Rating:  %08u\n", info->ncr);
        if (info->npr)
                seq_printf(m, "Nominal Perm. Rating: %08u\n", info->npr);
        if (info->ntr)
                seq_printf(m, "Nominal Temp. Rating: %08u\n", info->ntr);
+       if (has_var_cap && info->nvr)
+               seq_printf(m, "Nominal Var. Rating:  %08u\n", info->nvr);
        if (info->cai) {
                seq_printf(m, "Capacity Adj. Ind.:   %d\n", info->cai);
                seq_printf(m, "Capacity Ch. Reason:  %d\n", info->ccr);