Skip to content

Commit

Permalink
s390/lowcore: reserve 96 bytes for IRB in lowcore
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Christian Borntraeger authored and Martin Schwidefsky committed May 28, 2014
1 parent 6eb58d9 commit 993072e
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions arch/s390/include/asm/lowcore.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,9 @@ struct _lowcore {
__u32 spinlock_lockval; /* 0x02fc */

/* Interrupt response block */
__u8 irb[64]; /* 0x0300 */
__u8 irb[96]; /* 0x0300 */

__u8 pad_0x0340[0x0e00-0x0340]; /* 0x0340 */
__u8 pad_0x0360[0x0e00-0x0360]; /* 0x0360 */

/*
* 0xe00 contains the address of the IPL Parameter Information
Expand Down Expand Up @@ -293,12 +293,13 @@ struct _lowcore {
__u8 pad_0x03a0[0x0400-0x03a4]; /* 0x03a4 */

/* Interrupt response block. */
__u8 irb[64]; /* 0x0400 */
__u8 irb[96]; /* 0x0400 */
__u8 pad_0x0460[0x0480-0x0460]; /* 0x0460 */

/* Per cpu primary space access list */
__u32 paste[16]; /* 0x0440 */
__u32 paste[16]; /* 0x0480 */

__u8 pad_0x0480[0x0e00-0x0480]; /* 0x0480 */
__u8 pad_0x04c0[0x0e00-0x04c0]; /* 0x04c0 */

/*
* 0xe00 contains the address of the IPL Parameter Information
Expand Down

0 comments on commit 993072e

Please sign in to comment.