From nobody Sun Sep 14 22:31:44 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1582804567; cv=none; d=zohomail.com; s=zohoarc; b=LqdsiAMuoZlg5ra+WKkuAoNjlVg2oSgxaMWCaA9hh+IhpcB4S7WvzmvlXU4+p14l0hX+ao9aCAYv5vL4OZtB8FkExP2rXfkH/BbnHUDGvJdJG2uWmcfhNi9KjFaEhgY5+MPjIBNnGyjejJZrSiuxnXfgd024TRhK2bTakq2SAwg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1582804567; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+t71KbZiwkfgBw6etbVkkrRPpGOORRsCMblOeHZ43rE=; b=ZyzhRuSnjUcJE+VQmWCJuhyF1DQk6X4tQsfx5+Fi+S51+draGn6/4Ke7ATbaQinCIHBne22PCuyFBwrYgFY0Mpurai1A+VSRCwNqHQudCFCpiVBwEI539aYWo7co2SMNWeLfzo5iRqNMEJAhQfbi3lglI0CbtL6cdhOH4XEvfAg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1582804567443602.1285136739947; Thu, 27 Feb 2020 03:56:07 -0800 (PST) Received: from localhost ([::1]:58064 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7Hlt-0001OM-5d for importer@patchew.org; Thu, 27 Feb 2020 06:56:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51072) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7Hkk-0007zH-7F for qemu-devel@nongnu.org; Thu, 27 Feb 2020 06:54:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7Hki-000197-RG for qemu-devel@nongnu.org; Thu, 27 Feb 2020 06:54:54 -0500 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:31661 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7Hki-00018T-Mm for qemu-devel@nongnu.org; Thu, 27 Feb 2020 06:54:52 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-228-ae-WZPW3NYmeDq9jCLvdcw-1; Thu, 27 Feb 2020 06:54:48 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5A0941937FC3; Thu, 27 Feb 2020 11:54:47 +0000 (UTC) Received: from localhost (ovpn-117-2.ams2.redhat.com [10.36.117.2]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 76D2F90A01; Thu, 27 Feb 2020 11:54:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1582804492; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+t71KbZiwkfgBw6etbVkkrRPpGOORRsCMblOeHZ43rE=; b=aJtgVPpKFnQOWn78koxfJIdeDGMWjNTI2eq4C6oX/vfRdCKtWDDfUAx0Eyyae3aZwDCtGN nfEd/dpsr2rUKm/cGjboT7ytBnEMwVmBdMRP9EVWYrba9v7pYvHe5Xe2tsr3PfNUsiEQ1x +SobrhuE7omuBX57MY6Ugqe404LGLE4= X-MC-Unique: ae-WZPW3NYmeDq9jCLvdcw-1 From: Cornelia Huck To: Peter Maydell Subject: [PULL 3/7] s390x: Add missing vcpu reset functions Date: Thu, 27 Feb 2020 12:54:27 +0100 Message-Id: <20200227115431.32364-4-cohuck@redhat.com> In-Reply-To: <20200227115431.32364-1-cohuck@redhat.com> References: <20200227115431.32364-1-cohuck@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 205.139.110.61 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Janosch Frank , David Hildenbrand , Cornelia Huck , qemu-devel@nongnu.org, qemu-s390x@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" From: Janosch Frank Up to now we only had an ioctl to reset vcpu data QEMU couldn't reach for the initial reset, which was also called for the clear reset. To be architecture compliant, we also need to clear local interrupts on a normal reset. Because of this and the upcoming protvirt support we need to add ioctls for the missing clear and normal resets. Signed-off-by: Janosch Frank Reviewed-by: Thomas Huth Acked-by: David Hildenbrand Message-Id: <20200214151636.8764-3-frankja@linux.ibm.com> Signed-off-by: Cornelia Huck --- target/s390x/cpu.c | 14 ++++++++++++-- target/s390x/kvm-stub.c | 10 +++++++++- target/s390x/kvm.c | 42 ++++++++++++++++++++++++++++++++-------- target/s390x/kvm_s390x.h | 4 +++- 4 files changed, 58 insertions(+), 12 deletions(-) diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index cf84d307c6a6..8da1905485f9 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -144,8 +144,18 @@ static void s390_cpu_reset(CPUState *s, cpu_reset_type= type) } =20 /* Reset state inside the kernel that we cannot access yet from QEMU. = */ - if (kvm_enabled() && type !=3D S390_CPU_RESET_NORMAL) { - kvm_s390_reset_vcpu(cpu); + if (kvm_enabled()) { + switch (type) { + case S390_CPU_RESET_CLEAR: + kvm_s390_reset_vcpu_clear(cpu); + break; + case S390_CPU_RESET_INITIAL: + kvm_s390_reset_vcpu_initial(cpu); + break; + case S390_CPU_RESET_NORMAL: + kvm_s390_reset_vcpu_normal(cpu); + break; + } } } =20 diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c index 5152e2bdf19b..c4cd497f850e 100644 --- a/target/s390x/kvm-stub.c +++ b/target/s390x/kvm-stub.c @@ -83,7 +83,15 @@ void kvm_s390_cmma_reset(void) { } =20 -void kvm_s390_reset_vcpu(S390CPU *cpu) +void kvm_s390_reset_vcpu_initial(S390CPU *cpu) +{ +} + +void kvm_s390_reset_vcpu_clear(S390CPU *cpu) +{ +} + +void kvm_s390_reset_vcpu_normal(S390CPU *cpu) { } =20 diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index 30112e529c2e..1d6fd6a27b48 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -151,6 +151,7 @@ static int cap_s390_irq; static int cap_ri; static int cap_gs; static int cap_hpage_1m; +static int cap_vcpu_resets; =20 static int active_cmma; =20 @@ -342,6 +343,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s) cap_async_pf =3D kvm_check_extension(s, KVM_CAP_ASYNC_PF); cap_mem_op =3D kvm_check_extension(s, KVM_CAP_S390_MEM_OP); cap_s390_irq =3D kvm_check_extension(s, KVM_CAP_S390_INJECT_IRQ); + cap_vcpu_resets =3D kvm_check_extension(s, KVM_CAP_S390_VCPU_RESETS); =20 if (!kvm_check_extension(s, KVM_CAP_S390_GMAP) || !kvm_check_extension(s, KVM_CAP_S390_COW)) { @@ -406,17 +408,41 @@ int kvm_arch_destroy_vcpu(CPUState *cs) return 0; } =20 -void kvm_s390_reset_vcpu(S390CPU *cpu) +static void kvm_s390_reset_vcpu(S390CPU *cpu, unsigned long type) { CPUState *cs =3D CPU(cpu); =20 - /* The initial reset call is needed here to reset in-kernel - * vcpu data that we can't access directly from QEMU - * (i.e. with older kernels which don't support sync_regs/ONE_REG). - * Before this ioctl cpu_synchronize_state() is called in common kvm - * code (kvm-all) */ - if (kvm_vcpu_ioctl(cs, KVM_S390_INITIAL_RESET, NULL)) { - error_report("Initial CPU reset failed on CPU %i", cs->cpu_index); + /* + * The reset call is needed here to reset in-kernel vcpu data that + * we can't access directly from QEMU (i.e. with older kernels + * which don't support sync_regs/ONE_REG). Before this ioctl + * cpu_synchronize_state() is called in common kvm code + * (kvm-all). + */ + if (kvm_vcpu_ioctl(cs, type)) { + error_report("CPU reset failed on CPU %i type %lx", + cs->cpu_index, type); + } +} + +void kvm_s390_reset_vcpu_initial(S390CPU *cpu) +{ + kvm_s390_reset_vcpu(cpu, KVM_S390_INITIAL_RESET); +} + +void kvm_s390_reset_vcpu_clear(S390CPU *cpu) +{ + if (cap_vcpu_resets) { + kvm_s390_reset_vcpu(cpu, KVM_S390_CLEAR_RESET); + } else { + kvm_s390_reset_vcpu(cpu, KVM_S390_INITIAL_RESET); + } +} + +void kvm_s390_reset_vcpu_normal(S390CPU *cpu) +{ + if (cap_vcpu_resets) { + kvm_s390_reset_vcpu(cpu, KVM_S390_NORMAL_RESET); } } =20 diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h index caf985955ba5..0b21789796d7 100644 --- a/target/s390x/kvm_s390x.h +++ b/target/s390x/kvm_s390x.h @@ -34,7 +34,9 @@ int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifi= er, uint32_t sch, int vq, bool assign); int kvm_s390_cmma_active(void); void kvm_s390_cmma_reset(void); -void kvm_s390_reset_vcpu(S390CPU *cpu); +void kvm_s390_reset_vcpu_clear(S390CPU *cpu); +void kvm_s390_reset_vcpu_normal(S390CPU *cpu); +void kvm_s390_reset_vcpu_initial(S390CPU *cpu); int kvm_s390_set_mem_limit(uint64_t new_limit, uint64_t *hw_limit); void kvm_s390_set_max_pagesize(uint64_t pagesize, Error **errp); void kvm_s390_crypto_reset(void); --=20 2.21.1