diff options
Diffstat (limited to 'arch/s390/kernel/sysinfo.c')
-rw-r--r-- | arch/s390/kernel/sysinfo.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/arch/s390/kernel/sysinfo.c b/arch/s390/kernel/sysinfo.c index a0ffc7717ed..f04d93aa48e 100644 --- a/arch/s390/kernel/sysinfo.c +++ b/arch/s390/kernel/sysinfo.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <asm/ebcdic.h> | 15 | #include <asm/ebcdic.h> |
16 | #include <asm/sysinfo.h> | 16 | #include <asm/sysinfo.h> |
17 | #include <asm/cpcmd.h> | 17 | #include <asm/cpcmd.h> |
18 | #include <asm/topology.h> | ||
18 | 19 | ||
19 | /* Sigh, math-emu. Don't ask. */ | 20 | /* Sigh, math-emu. Don't ask. */ |
20 | #include <asm/sfp-util.h> | 21 | #include <asm/sfp-util.h> |
@@ -74,6 +75,42 @@ static int stsi_1_1_1(struct sysinfo_1_1_1 *info, char *page, int len) | |||
74 | "Model Temp. Capacity: %-16.16s %08u\n", | 75 | "Model Temp. Capacity: %-16.16s %08u\n", |
75 | info->model_temp_cap, | 76 | info->model_temp_cap, |
76 | *(u32 *) info->model_temp_cap_rating); | 77 | *(u32 *) info->model_temp_cap_rating); |
78 | if (info->cai) { | ||
79 | len += sprintf(page + len, | ||
80 | "Capacity Adj. Ind.: %d\n", | ||
81 | info->cai); | ||
82 | len += sprintf(page + len, "Capacity Ch. Reason: %d\n", | ||
83 | info->ccr); | ||
84 | } | ||
85 | return len; | ||
86 | } | ||
87 | |||
88 | static int stsi_15_1_x(struct sysinfo_15_1_x *info, char *page, int len) | ||
89 | { | ||
90 | static int max_mnest; | ||
91 | int i, rc; | ||
92 | |||
93 | len += sprintf(page + len, "\n"); | ||
94 | if (!MACHINE_HAS_TOPOLOGY) | ||
95 | return len; | ||
96 | if (max_mnest) { | ||
97 | stsi(info, 15, 1, max_mnest); | ||
98 | } else { | ||
99 | for (max_mnest = 6; max_mnest > 1; max_mnest--) { | ||
100 | rc = stsi(info, 15, 1, max_mnest); | ||
101 | if (rc != -ENOSYS) | ||
102 | break; | ||
103 | } | ||
104 | } | ||
105 | len += sprintf(page + len, "CPU Topology HW: "); | ||
106 | for (i = 0; i < TOPOLOGY_NR_MAG; i++) | ||
107 | len += sprintf(page + len, " %d", info->mag[i]); | ||
108 | len += sprintf(page + len, "\n"); | ||
109 | store_topology(info); | ||
110 | len += sprintf(page + len, "CPU Topology SW: "); | ||
111 | for (i = 0; i < TOPOLOGY_NR_MAG; i++) | ||
112 | len += sprintf(page + len, " %d", info->mag[i]); | ||
113 | len += sprintf(page + len, "\n"); | ||
77 | return len; | 114 | return len; |
78 | } | 115 | } |
79 | 116 | ||
@@ -87,7 +124,6 @@ static int stsi_1_2_2(struct sysinfo_1_2_2 *info, char *page, int len) | |||
87 | ext = (struct sysinfo_1_2_2_extension *) | 124 | ext = (struct sysinfo_1_2_2_extension *) |
88 | ((unsigned long) info + info->acc_offset); | 125 | ((unsigned long) info + info->acc_offset); |
89 | 126 | ||
90 | len += sprintf(page + len, "\n"); | ||
91 | len += sprintf(page + len, "CPUs Total: %d\n", | 127 | len += sprintf(page + len, "CPUs Total: %d\n", |
92 | info->cpus_total); | 128 | info->cpus_total); |
93 | len += sprintf(page + len, "CPUs Configured: %d\n", | 129 | len += sprintf(page + len, "CPUs Configured: %d\n", |
@@ -217,6 +253,9 @@ static int proc_read_sysinfo(char *page, char **start, | |||
217 | len = stsi_1_1_1((struct sysinfo_1_1_1 *) info, page, len); | 253 | len = stsi_1_1_1((struct sysinfo_1_1_1 *) info, page, len); |
218 | 254 | ||
219 | if (level >= 1) | 255 | if (level >= 1) |
256 | len = stsi_15_1_x((struct sysinfo_15_1_x *) info, page, len); | ||
257 | |||
258 | if (level >= 1) | ||
220 | len = stsi_1_2_2((struct sysinfo_1_2_2 *) info, page, len); | 259 | len = stsi_1_2_2((struct sysinfo_1_2_2 *) info, page, len); |
221 | 260 | ||
222 | if (level >= 2) | 261 | if (level >= 2) |