aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2014-05-26 15:55:08 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2014-05-28 04:38:59 -0400
commit993072ee67aa179c48c85eb19869804e68887d86 (patch)
treeb8d3739a32da8030ed819b14f9b14c28f7f2299a
parent6eb58d9bc113b9d3f97b710d9e5c1bc4f5044768 (diff)
s390/lowcore: reserve 96 bytes for IRB in lowcore
The IRB might be 96 bytes if the extended-I/O-measurement facility is used. This feature is currently not used by Linux, but struct irb already has the emw defined. So let's make the irb in lowcore match the size of the internal data structure to be future proof. We also have to add a pad, to correctly align the paste. The bigger irb field also circumvents a bug in some QEMU versions that always write the emw field on test subchannel and therefore destroy the paste definitions of this CPU. Running under these QEMU version broke some timing functions in the VDSO and all users of these functions, e.g. some JREs. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Sebastian Ott <sebott@linux.vnet.ibm.com> Cc: Cornelia Huck <cornelia.huck@de.ibm.com> Cc: stable@vger.kernel.org
-rw-r--r--arch/s390/include/asm/lowcore.h11
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h
index 26e03ce27c50..a406f24737cd 100644
--- a/arch/s390/include/asm/lowcore.h
+++ b/arch/s390/include/asm/lowcore.h
@@ -144,9 +144,9 @@ struct _lowcore {
144 __u32 spinlock_lockval; /* 0x02fc */ 144 __u32 spinlock_lockval; /* 0x02fc */
145 145
146 /* Interrupt response block */ 146 /* Interrupt response block */
147 __u8 irb[64]; /* 0x0300 */ 147 __u8 irb[96]; /* 0x0300 */
148 148
149 __u8 pad_0x0340[0x0e00-0x0340]; /* 0x0340 */ 149 __u8 pad_0x0360[0x0e00-0x0360]; /* 0x0360 */
150 150
151 /* 151 /*
152 * 0xe00 contains the address of the IPL Parameter Information 152 * 0xe00 contains the address of the IPL Parameter Information
@@ -293,12 +293,13 @@ struct _lowcore {
293 __u8 pad_0x03a0[0x0400-0x03a4]; /* 0x03a4 */ 293 __u8 pad_0x03a0[0x0400-0x03a4]; /* 0x03a4 */
294 294
295 /* Interrupt response block. */ 295 /* Interrupt response block. */
296 __u8 irb[64]; /* 0x0400 */ 296 __u8 irb[96]; /* 0x0400 */
297 __u8 pad_0x0460[0x0480-0x0460]; /* 0x0460 */
297 298
298 /* Per cpu primary space access list */ 299 /* Per cpu primary space access list */
299 __u32 paste[16]; /* 0x0440 */ 300 __u32 paste[16]; /* 0x0480 */
300 301
301 __u8 pad_0x0480[0x0e00-0x0480]; /* 0x0480 */ 302 __u8 pad_0x04c0[0x0e00-0x04c0]; /* 0x04c0 */
302 303
303 /* 304 /*
304 * 0xe00 contains the address of the IPL Parameter Information 305 * 0xe00 contains the address of the IPL Parameter Information