diff options
author | Christian Borntraeger <borntraeger@de.ibm.com> | 2017-05-12 13:47:30 +0200 |
---|---|---|
committer | Cornelia Huck <cornelia.huck@de.ibm.com> | 2017-05-19 12:31:28 +0200 |
commit | cb4f4bc3535f554daa3266aaa447843949a68193 (patch) | |
tree | 4e639b7dd0061612b43a82e6f34e921929a23862 /target | |
parent | 5eb74557cdbac602117fa2d30e08a76b82fb0301 (diff) |
s390/kvm: do not reset riccb on initial cpu reset
The riccb is kept unchanged during initial cpu reset. Move the data
structure to the other registers that are unchanged.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'target')
-rw-r--r-- | target/s390x/cpu.c | 7 | ||||
-rw-r--r-- | target/s390x/cpu.h | 6 |
2 files changed, 8 insertions, 5 deletions
diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index a1bf2ba5a7..a69005d9b5 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -92,9 +92,10 @@ static void s390_cpu_initial_reset(CPUState *s) int i; s390_cpu_reset(s); - /* initial reset does not touch regs,fregs and aregs */ - memset(&env->fpc, 0, offsetof(CPUS390XState, end_reset_fields) - - offsetof(CPUS390XState, fpc)); + /* initial reset does not clear everything! */ + memset(&env->start_initial_reset_fields, 0, + offsetof(CPUS390XState, end_reset_fields) - + offsetof(CPUS390XState, start_initial_reset_fields)); /* architectured initial values for CR 0 and 14 */ env->cregs[0] = CR0_RESET; diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h index e27d9d874a..c74b4193ee 100644 --- a/target/s390x/cpu.h +++ b/target/s390x/cpu.h @@ -88,6 +88,10 @@ typedef struct CPUS390XState { */ CPU_DoubleU vregs[32][2]; /* vector registers */ uint32_t aregs[16]; /* access registers */ + uint8_t riccb[64]; /* runtime instrumentation control */ + + /* Fields up to this point are not cleared by initial CPU reset */ + struct {} start_initial_reset_fields; uint32_t fpc; /* floating-point control register */ uint32_t cc_op; @@ -137,8 +141,6 @@ typedef struct CPUS390XState { uint64_t gbea; uint64_t pp; - uint8_t riccb[64]; - /* Fields up to this point are cleared by a CPU reset */ struct {} end_reset_fields; |