From patchwork Fri Feb 7 17:16:14 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Borntraeger X-Patchwork-Id: 318116 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id C0F372C00A0 for ; Sat, 8 Feb 2014 04:17:11 +1100 (EST) Received: from localhost ([::1]:42780 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WBp37-0001AQ-Fo for incoming@patchwork.ozlabs.org; Fri, 07 Feb 2014 12:17:09 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42465) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WBp2H-00017n-Vk for qemu-devel@nongnu.org; Fri, 07 Feb 2014 12:16:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WBp28-0005ho-W1 for qemu-devel@nongnu.org; Fri, 07 Feb 2014 12:16:17 -0500 Received: from e06smtp11.uk.ibm.com ([195.75.94.107]:49370) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WBp28-0005hF-Ns for qemu-devel@nongnu.org; Fri, 07 Feb 2014 12:16:08 -0500 Received: from /spool/local by e06smtp11.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 7 Feb 2014 17:16:06 -0000 Received: from d06dlp02.portsmouth.uk.ibm.com (9.149.20.14) by e06smtp11.uk.ibm.com (192.168.101.141) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Fri, 7 Feb 2014 17:16:05 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by d06dlp02.portsmouth.uk.ibm.com (Postfix) with ESMTP id BF5CD2190066 for ; Fri, 7 Feb 2014 17:16:02 +0000 (GMT) Received: from d06av08.portsmouth.uk.ibm.com (d06av08.portsmouth.uk.ibm.com [9.149.37.249]) by b06cxnps4075.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id s17HFqdH64749722 for ; Fri, 7 Feb 2014 17:15:52 GMT Received: from d06av08.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id s17HG496029284 for ; Fri, 7 Feb 2014 10:16:04 -0700 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id s17HG3a2029254; Fri, 7 Feb 2014 10:16:04 -0700 Received: by tuxmaker.boeblingen.de.ibm.com (Postfix, from userid 25651) id 1CD96122443E; Fri, 7 Feb 2014 18:16:04 +0100 (CET) From: Christian Borntraeger To: qemu-devel Date: Fri, 7 Feb 2014 18:16:14 +0100 Message-Id: <1391793385-46694-6-git-send-email-borntraeger@de.ibm.com> X-Mailer: git-send-email 1.8.4.2 In-Reply-To: <1391793385-46694-1-git-send-email-borntraeger@de.ibm.com> References: <1391793385-46694-1-git-send-email-borntraeger@de.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 14020717-5024-0000-0000-000008A8FBDB X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 195.75.94.107 Cc: Heinz Graalfs , Thomas Huth , Alexander Graf , Dominik Dingel , Christian Borntraeger , Jens Freimann , Paolo Bonzini , Richard Henderson Subject: [Qemu-devel] [Patch/RFC 05/16] s390x/kvm: Rework SIGP INITIAL CPU RESET handler X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Thomas Huth 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 Signed-off-by: Thomas Huth Reviewed-by: Cornelia Huck Signed-off-by: Christian Borntraeger --- 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 b93fe84..1f89a89 100644 --- a/target-s390x/kvm.c +++ b/target-s390x/kvm.c @@ -624,25 +624,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 @@ -681,7 +669,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);