aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/include/asm/sysinfo.h
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2015-01-14 11:52:10 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2015-01-22 06:16:01 -0500
commit10ad34bc76dfbc49bda327a13012f6754c0c72e0 (patch)
tree4d76fb6882da2eb3e77b53c4fe64f6367ffbd79d /arch/s390/include/asm/sysinfo.h
parent1f6b83e5e4d3aed46eac1d219322fba9c7341cd8 (diff)
s390: add SMT support
The multi-threading facility is introduced with the z13 processor family. This patch adds code to detect the multi-threading facility. With the facility enabled each core will surface multiple hardware threads to the system. Each hardware threads looks like a normal CPU to the operating system with all its registers and properties. The SCLP interface reports the SMT topology indirectly via the maximum thread id. Each reported CPU in the result of a read-scp-information is a core representing a number of hardware threads. To reflect the reduced CPU capacity if two hardware threads run on a single core the MT utilization counter set is used to normalize the raw cputime obtained by the CPU timer deltas. This scaled cputime is reported via the taskstats interface. The normal /proc/stat numbers are based on the raw cputime and are not affected by the normalization. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/include/asm/sysinfo.h')
-rw-r--r--arch/s390/include/asm/sysinfo.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/arch/s390/include/asm/sysinfo.h b/arch/s390/include/asm/sysinfo.h
index f92428e459f8..73f12d21af4d 100644
--- a/arch/s390/include/asm/sysinfo.h
+++ b/arch/s390/include/asm/sysinfo.h
@@ -90,7 +90,11 @@ struct sysinfo_2_2_2 {
90 unsigned short cpus_reserved; 90 unsigned short cpus_reserved;
91 char name[8]; 91 char name[8];
92 unsigned int caf; 92 unsigned int caf;
93 char reserved_2[16]; 93 char reserved_2[8];
94 unsigned char mt_installed;
95 unsigned char mt_general;
96 unsigned char mt_psmtid;
97 char reserved_3[5];
94 unsigned short cpus_dedicated; 98 unsigned short cpus_dedicated;
95 unsigned short cpus_shared; 99 unsigned short cpus_shared;
96}; 100};
@@ -120,26 +124,28 @@ struct sysinfo_3_2_2 {
120 124
121extern int topology_max_mnest; 125extern int topology_max_mnest;
122 126
123#define TOPOLOGY_CPU_BITS 64 127#define TOPOLOGY_CORE_BITS 64
124#define TOPOLOGY_NR_MAG 6 128#define TOPOLOGY_NR_MAG 6
125 129
126struct topology_cpu { 130struct topology_core {
127 unsigned char reserved0[4]; 131 unsigned char nl;
132 unsigned char reserved0[3];
128 unsigned char :6; 133 unsigned char :6;
129 unsigned char pp:2; 134 unsigned char pp:2;
130 unsigned char reserved1; 135 unsigned char reserved1;
131 unsigned short origin; 136 unsigned short origin;
132 unsigned long mask[TOPOLOGY_CPU_BITS / BITS_PER_LONG]; 137 unsigned long mask[TOPOLOGY_CORE_BITS / BITS_PER_LONG];
133}; 138};
134 139
135struct topology_container { 140struct topology_container {
136 unsigned char reserved[7]; 141 unsigned char nl;
142 unsigned char reserved[6];
137 unsigned char id; 143 unsigned char id;
138}; 144};
139 145
140union topology_entry { 146union topology_entry {
141 unsigned char nl; 147 unsigned char nl;
142 struct topology_cpu cpu; 148 struct topology_core cpu;
143 struct topology_container container; 149 struct topology_container container;
144}; 150};
145 151