qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel <qemu-devel@nongnu.org>,
	Alexander Graf <agraf@suse.de>,
	Richard Henderson <rth@twiddle.net>,
	Cornelia Huck <cohuck@redhat.com>, Thomas Huth <thuth@redhat.com>,
	"Jason J. Herne" <jjherne@linux.vnet.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>
Subject: [Qemu-devel] [PULL 35/40] s390x/cpumodel: we are always in zarchitecture mode
Date: Fri, 14 Jul 2017 12:41:02 +0200	[thread overview]
Message-ID: <1500028867-134709-36-git-send-email-borntraeger@de.ibm.com> (raw)
In-Reply-To: <1500028867-134709-1-git-send-email-borntraeger@de.ibm.com>

From: "Jason J. Herne" <jjherne@linux.vnet.ibm.com>

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 <jjherne@linux.vnet.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 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

  parent reply	other threads:[~2017-07-14 10:41 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-14 10:40 [Qemu-devel] [PULL 00/40] s390x: fixes, enhancements for 2.10 softfreeze Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 01/40] s390x/kvm: Rework cmma management Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 02/40] linux-headers: update to 4.13-rc0 Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 03/40] s390x/migration: Storage attributes device Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 04/40] s390x/migration: Monitor commands for storage attributes Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 05/40] s390x/cpumodel: clean up spacing and comments Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 06/40] s390x/cpumodel: provide compat handling for new cpu features Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 07/40] s390x: add flags field for registering I/O adapter Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 08/40] s390x/flic: introduce modify_ais_mode callback Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 09/40] s390x/flic: introduce inject_airq callback Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 10/40] s390x/sic: realize SIC handling Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 11/40] s390x/css: update css_adapter_interrupt Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 12/40] s390x: add helper get_machine_class Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 13/40] s390x: add css_migration_enabled to machine class Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 14/40] s390x/css: add missing css state conditionally Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 15/40] s390x/css: add ORB to SubchDev Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 16/40] s390x/css: activate ChannelSubSys migration Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 17/40] s390x/css: use SubchDev.orb Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 18/40] pc-bios/s390-ccw: Move libc functions to separate header Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 19/40] pc-bios/s390-ccw: Move ebc2asc to sclp.c Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 20/40] pc-bios/s390-ccw: Move virtio-block related functions into a separate file Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 21/40] pc-bios/s390-ccw: Add a write() function for stdio Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 22/40] pc-bios/s390-ccw: Move byteswap functions to a separate header Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 23/40] pc-bios/s390-ccw: Remove unused structs from virtio.h Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 24/40] pc-bios/s390-ccw: Add code for virtio feature negotiation Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 25/40] roms/SLOF: Update submodule to latest status Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 26/40] pc-bios/s390-ccw: Add core files for the network bootloading program Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 27/40] pc-bios/s390-ccw: Add virtio-net driver code Christian Borntraeger
2017-07-14 10:40 ` [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 10:40 ` [Qemu-devel] [PULL 29/40] pc-bios/s390: add s390-netboot.img Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 30/40] pc-bios/s390: rebuild s390-ccw.img Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 31/40] s390x: initialize cpu firstly Christian Borntraeger
2017-07-14 10:40 ` [Qemu-devel] [PULL 32/40] s390x/cpumodel: add zpci, aen and ais facilities Christian Borntraeger
2017-07-17 17:23   ` David Hildenbrand
2017-07-17 18:12     ` Christian Borntraeger
2017-07-18 14:49       ` David Hildenbrand
2017-07-14 10:41 ` [Qemu-devel] [PULL 33/40] s390x/flic: migrate ais states Christian Borntraeger
2017-09-20 12:39   ` Christian Borntraeger
2017-09-20 12:53     ` [Qemu-devel] block ais migration for machines <= 2.9 Christian Borntraeger
2017-09-20 12:59       ` Cornelia Huck
2017-09-20 14:04         ` Christian Borntraeger
2017-09-20 16:04       ` Dr. David Alan Gilbert
2017-09-21  3:40         ` Yi Min Zhao
2017-09-21  7:41         ` Christian Borntraeger
2017-09-20 16:20       ` no-reply
2017-07-14 10:41 ` [Qemu-devel] [PULL 34/40] s390x/cpumodel: wire up new hardware features Christian Borntraeger
2017-07-17 17:30   ` David Hildenbrand
2017-07-17 18:14     ` Christian Borntraeger
2017-07-18 14:52       ` David Hildenbrand
2017-07-14 10:41 ` Christian Borntraeger [this message]
2017-07-17 17:33   ` [Qemu-devel] [PULL 35/40] s390x/cpumodel: we are always in zarchitecture mode David Hildenbrand
2017-07-17 17:36     ` David Hildenbrand
2017-07-14 10:41 ` [Qemu-devel] [PULL 36/40] s390x/cpumodel: add esop/esop2 to z12 model Christian Borntraeger
2017-07-14 10:41 ` [Qemu-devel] [PULL 37/40] s390x/kvm: Enable KSS facility for nested virtualization Christian Borntraeger
2017-07-17 17:35   ` David Hildenbrand
2017-07-17 18:12     ` Christian Borntraeger
2017-07-14 10:41 ` [Qemu-devel] [PULL 38/40] s390x/kvm: enable guarded storage Christian Borntraeger
2017-07-14 10:41 ` [Qemu-devel] [PULL 39/40] s390x/arch_dump: also dump guarded storage control block Christian Borntraeger
2017-07-14 10:41 ` [Qemu-devel] [PULL 40/40] s390x/gdb: add gs registers Christian Borntraeger
2017-07-14 14:32 ` [Qemu-devel] [PULL 00/40] s390x: fixes, enhancements for 2.10 softfreeze Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1500028867-134709-36-git-send-email-borntraeger@de.ibm.com \
    --to=borntraeger@de.ibm.com \
    --cc=agraf@suse.de \
    --cc=cohuck@redhat.com \
    --cc=jjherne@linux.vnet.ibm.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).