[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 35/40] s390x/cpumodel: we are always in zarchitecture
From: |
Christian Borntraeger |
Subject: |
[Qemu-devel] [PULL 35/40] s390x/cpumodel: we are always in zarchitecture mode |
Date: |
Fri, 14 Jul 2017 12:41:02 +0200 |
From: "Jason J. Herne" <address@hidden>
In QEMU, a guest VCPU always started in and never was able to leave
z/Architecture mode. Now we have an architected way of showing this
condition.
The SIGP SET ARCHITECTURE instruction is simply rejected. Linux as guest
seems to not care about the return value, which is a good thing
The new handling is just like already being in z/Architecture mode.
We'll not try to fake absence of this facility, but still not indicate
the facility in case some strange CPU model turned z/Architecture off
completely (which doesn't work either way but let's us see how a
guest would react on a lack of this facility).
Signed-off-by: Jason J. Herne <address@hidden>
Acked-by: Christian Borntraeger <address@hidden>
Acked-by: Cornelia Huck <address@hidden>
Signed-off-by: Christian Borntraeger <address@hidden>
---
target/s390x/cpu_features.c | 5 +++--
target/s390x/kvm.c | 38 +++++++++++---------------------------
2 files changed, 14 insertions(+), 29 deletions(-)
diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
index e5a3f71..fa887d9 100644
--- a/target/s390x/cpu_features.c
+++ b/target/s390x/cpu_features.c
@@ -337,8 +337,9 @@ void s390_fill_feat_block(const S390FeatBitmap features,
S390FeatType type,
int bit_nr;
if (type == S390_FEAT_TYPE_STFL && test_bit(S390_FEAT_ZARCH, features)) {
- /* z/Architecture is always active if around */
- data[0] |= 0x20;
+ /* Features that are always active */
+ data[0] |= 0x20; /* z/Architecture */
+ data[17] |= 0x20; /* Configuration-z-architectural-mode */
}
feat = find_first_bit(features, S390_FEAT_MAX);
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index 3a80f1f..8c6cc0a 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -1757,41 +1757,25 @@ static int sigp_set_architecture(S390CPU *cpu, uint32_t
param,
{
CPUState *cur_cs;
S390CPU *cur_cpu;
+ bool all_stopped = true;
- /* due to the BQL, we are the only active cpu */
CPU_FOREACH(cur_cs) {
cur_cpu = S390_CPU(cur_cs);
- if (cur_cpu->env.sigp_order != 0) {
- return SIGP_CC_BUSY;
+
+ if (cur_cpu == cpu) {
+ continue;
}
- cpu_synchronize_state(cur_cs);
- /* all but the current one have to be stopped */
- if (cur_cpu != cpu &&
- s390_cpu_get_state(cur_cpu) != CPU_STATE_STOPPED) {
- *status_reg &= 0xffffffff00000000ULL;
- *status_reg |= SIGP_STAT_INCORRECT_STATE;
- return SIGP_CC_STATUS_STORED;
+ if (s390_cpu_get_state(cur_cpu) != CPU_STATE_STOPPED) {
+ all_stopped = false;
}
}
- switch (param & 0xff) {
- case SIGP_MODE_ESA_S390:
- /* not supported */
- return SIGP_CC_NOT_OPERATIONAL;
- case SIGP_MODE_Z_ARCH_TRANS_ALL_PSW:
- case SIGP_MODE_Z_ARCH_TRANS_CUR_PSW:
- CPU_FOREACH(cur_cs) {
- cur_cpu = S390_CPU(cur_cs);
- cur_cpu->env.pfault_token = -1UL;
- }
- break;
- default:
- *status_reg &= 0xffffffff00000000ULL;
- *status_reg |= SIGP_STAT_INVALID_PARAMETER;
- return SIGP_CC_STATUS_STORED;
- }
+ *status_reg &= 0xffffffff00000000ULL;
- return SIGP_CC_ORDER_CODE_ACCEPTED;
+ /* Reject set arch order, with czam we're always in z/Arch mode. */
+ *status_reg |= (all_stopped ? SIGP_STAT_INVALID_PARAMETER :
+ SIGP_STAT_INCORRECT_STATE);
+ return SIGP_CC_STATUS_STORED;
}
static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
--
2.7.4
- [Qemu-devel] [PULL 00/40] s390x: fixes, enhancements for 2.10 softfreeze, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 02/40] linux-headers: update to 4.13-rc0, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 07/40] s390x: add flags field for registering I/O adapter, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 05/40] s390x/cpumodel: clean up spacing and comments, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 01/40] s390x/kvm: Rework cmma management, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 03/40] s390x/migration: Storage attributes device, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 17/40] s390x/css: use SubchDev.orb, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 18/40] pc-bios/s390-ccw: Move libc functions to separate header, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 20/40] pc-bios/s390-ccw: Move virtio-block related functions into a separate file, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 39/40] s390x/arch_dump: also dump guarded storage control block, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 35/40] s390x/cpumodel: we are always in zarchitecture mode,
Christian Borntraeger <=
- [Qemu-devel] [PULL 28/40] pc-bios/s390-ccw: Link libnet into the netboot image and do the TFTP load, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 38/40] s390x/kvm: enable guarded storage, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 40/40] s390x/gdb: add gs registers, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 27/40] pc-bios/s390-ccw: Add virtio-net driver code, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 26/40] pc-bios/s390-ccw: Add core files for the network bootloading program, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 25/40] roms/SLOF: Update submodule to latest status, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 22/40] pc-bios/s390-ccw: Move byteswap functions to a separate header, Christian Borntraeger, 2017/07/14
- [Qemu-devel] [PULL 19/40] pc-bios/s390-ccw: Move ebc2asc to sclp.c, Christian Borntraeger, 2017/07/14