qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Christian Borntraeger <borntraeger@de.ibm.com>
To: qemu-devel <qemu-devel@nongnu.org>,
	Anthony Liguori <anthony@codemonkey.ws>,
	Peter Maydell <peter.maydell@linaro.org>
Cc: Thomas Huth <thuth@linux.vnet.ibm.com>,
	Alexander Graf <agraf@suse.de>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Jens Freimann <jfrei@linux.vnet.ibm.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	Richard Henderson <rth@twiddle.net>
Subject: [Qemu-devel] [PULL 19/22] s390x/kvm: Rework SIGP INITIAL CPU RESET handler
Date: Fri, 28 Feb 2014 10:31:03 +0100	[thread overview]
Message-ID: <1393579866-43465-20-git-send-email-borntraeger@de.ibm.com> (raw)
In-Reply-To: <1393579866-43465-1-git-send-email-borntraeger@de.ibm.com>

From: Thomas Huth <thuth@linux.vnet.ibm.com>

The s390_cpu_initial_reset() function had two deficiencies: First, it
used an ioctl for the destination CPU, and this ioctl could block
nearly forever, as long as the destination CPU was running in the SIE
loop. Second, it also cleared the general purpose registers - something
it should not do according to the Principles of Operations.
Since we've already got another function for the initial CPU reset in
cpu.c, we can also use that function instead. And by using run_on_cpu()
for executing this code, we make sure that the destination CPU is
correctly kicked out of kernel mode now.

Suggested-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 25 +++++++------------------
 1 file changed, 7 insertions(+), 18 deletions(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index d3f0d4a..75e8822 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -626,25 +626,13 @@ int kvm_s390_cpu_restart(S390CPU *cpu)
     return 0;
 }
 
-static int s390_cpu_initial_reset(S390CPU *cpu)
+static void sigp_initial_cpu_reset(void *arg)
 {
-    CPUState *cs = CPU(cpu);
-    CPUS390XState *env = &cpu->env;
-    int i;
-
-    s390_del_running_cpu(cpu);
-    if (kvm_vcpu_ioctl(cs, KVM_S390_INITIAL_RESET, NULL) < 0) {
-        perror("cannot init reset vcpu");
-    }
+    CPUState *cpu = arg;
+    S390CPUClass *scc = S390_CPU_GET_CLASS(cpu);
 
-    /* Manually zero out all registers */
-    cpu_synchronize_state(cs);
-    for (i = 0; i < 16; i++) {
-        env->regs[i] = 0;
-    }
-
-    DPRINTF("DONE: SIGP initial reset: %p\n", env);
-    return 0;
+    cpu_synchronize_state(cpu);
+    scc->initial_cpu_reset(cpu);
 }
 
 #define SIGP_ORDER_MASK 0x000000ff
@@ -683,7 +671,8 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
         cc = 1;   /* status stored */
         break;
     case SIGP_INITIAL_CPU_RESET:
-        cc = s390_cpu_initial_reset(target_cpu);
+        run_on_cpu(CPU(target_cpu), sigp_initial_cpu_reset, CPU(target_cpu));
+        cc = 0;
         break;
     default:
         DPRINTF("KVM: unknown SIGP: 0x%x\n", order_code);
-- 
1.8.4.2

  parent reply	other threads:[~2014-02-28  9:31 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-28  9:30 [Qemu-devel] [PULL 00/22] s390/kvm: features, fixes and cleanups for 2.0 Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 01/22] update linux headers to kvm/next Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 02/22] s390x/kvm: implement floating-interrupt controller device Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 03/22] s390x/async_pf: Check for apf extension and enable pfault Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 04/22] s390x/kvm: Fixed bad SIGP SET-ARCHITECTURE handler Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 05/22] s390x/virtio-hcall: Add range check for hypervisor call Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 06/22] s390x/virtio-hcall: Specification exception for illegal subcodes Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 07/22] s390x/eventfacility: mask out commands Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 08/22] s390x/sclp: Fixed the size of sccb and code parameter Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 09/22] s390x/sclp: Add missing checks to SCLP handler Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 10/22] s390x/sclp: Fixed setting of condition code register Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 11/22] s390x/event-facility: some renaming Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 12/22] s390x/event-facility: code restructure Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 13/22] s390x/event-facility: add support for live migration Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 14/22] s390x/event-facility: exploit realize/unrealize Christian Borntraeger
2014-02-28  9:30 ` [Qemu-devel] [PULL 15/22] s390-ccw.img: Fix sporadic reboot hangs: Initialize next_idx Christian Borntraeger
2014-02-28  9:31 ` [Qemu-devel] [PULL 16/22] s390-ccw.img: Fix sporadic errors with ccw boot image - initialize css Christian Borntraeger
2014-02-28  9:31 ` [Qemu-devel] [PULL 17/22] s390-ccw.img: new binary rom to match latest fixes Christian Borntraeger
2014-02-28  9:31 ` [Qemu-devel] [PULL 18/22] s390x/cpu: Use ioctl to reset state in the kernel Christian Borntraeger
2014-02-28  9:31 ` Christian Borntraeger [this message]
2014-02-28  9:31 ` [Qemu-devel] [PULL 20/22] s390x/kvm: Add missing SIGP CPU RESET order Christian Borntraeger
2014-02-28  9:31 ` [Qemu-devel] [PULL 21/22] s390x/kvm: Rework priv instruction handlers Christian Borntraeger
2014-02-28  9:31 ` [Qemu-devel] [PULL 22/22] s390x/ipl: Fix crash of ELF images with arbitrary entry points Christian Borntraeger
2014-03-04 15:23 ` [Qemu-devel] [PULL 00/22] s390/kvm: features, fixes and cleanups for 2.0 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=1393579866-43465-20-git-send-email-borntraeger@de.ibm.com \
    --to=borntraeger@de.ibm.com \
    --cc=agraf@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=cornelia.huck@de.ibm.com \
    --cc=jfrei@linux.vnet.ibm.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=thuth@linux.vnet.ibm.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).