From nobody Fri May 3 09:05:11 2024 Delivered-To: importer@patchew.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=1605781497; cv=none; d=zohomail.com; s=zohoarc; b=nGY225fMsjk6Y9IrlX2jDu7Lv8D0jcaRI8uyHqz4CZIqgEKz9Q5gwui4H7k6QeOon0SprBmgkiqGL2xOIeotTs8eRUgcfFrvg+fA3Onp1Ws0j4OIL/jJ4WGOmDDkwZOUaI7AxSdsO079Etuj1CljOX5hOaEgJfJKnb4McW5mUf0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605781497; 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=+BSsGnWegFpApX/8l4Cqt6AHgagAfQOael42BdBz81A=; b=XksxYJkQ+R7AF0pzdqOEsn9KLqTbWAhY13ekCBPbqynqDWrV09f+dIoOyKSV3NtAKro1dOjToK4fSAeNyzN98a4OCeHWYVxfAswxkbLjXoBGtoQ17AdsbwKP5k77aYj9AMwaqI8yCioXMFY2gByZdIEDmtflWzOnr3+YW5FuDDo= 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 1605781497464625.6485296365877; Thu, 19 Nov 2020 02:24:57 -0800 (PST) Received: from localhost ([::1]:46078 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kfh7W-0002Y3-Ck for importer@patchew.org; Thu, 19 Nov 2020 05:24:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kfh6K-0001G8-4T for qemu-devel@nongnu.org; Thu, 19 Nov 2020 05:23:40 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:58316) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kfh6F-0004FF-Rk for qemu-devel@nongnu.org; Thu, 19 Nov 2020 05:23:39 -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-384-fP-iHs_tOp25CuGDD8ANEg-1; Thu, 19 Nov 2020 05:23:32 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 23F941084429; Thu, 19 Nov 2020 10:23:31 +0000 (UTC) Received: from gondolin.redhat.com (ovpn-113-214.ams2.redhat.com [10.36.113.214]) by smtp.corp.redhat.com (Postfix) with ESMTP id 96FE05D9C0; Thu, 19 Nov 2020 10:23:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605781414; 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=+BSsGnWegFpApX/8l4Cqt6AHgagAfQOael42BdBz81A=; b=hbCCNHQQBmnWJa/0ZEkXqaKmmMru6PSjt/EI/rfmUfPP+2RDy4P5/Re0HUjPRdNmMMSzPO m0A93WWOoHhWD56nOyJZEXH/YbnbDU2ddvx4AJl5TZGCJNyZeiGA5gO1zTr/nh6u0MgRXr 7bLb5mnMJOWq3zpy3AgXQv4ptMy/sWs= X-MC-Unique: fP-iHs_tOp25CuGDD8ANEg-1 From: Cornelia Huck To: Peter Maydell Subject: [PULL for-5.2 1/3] s390/kvm: fix diag318 propagation and reset functionality Date: Thu, 19 Nov 2020 11:23:23 +0100 Message-Id: <20201119102325.1314765-2-cohuck@redhat.com> In-Reply-To: <20201119102325.1314765-1-cohuck@redhat.com> References: <20201119102325.1314765-1-cohuck@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=cohuck@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=63.128.21.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/18 23:36:20 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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 , Cornelia Huck , qemu-devel@nongnu.org, qemu-s390x@nongnu.org, Collin Walling 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: Collin Walling The Control Program Name Code (CPNC) portion of the diag318 info must be set within the SIE block of each VCPU in the configuration. The handler will iterate through each VCPU and dirty the diag318_info reg to be synced with KVM on a subsequent sync_regs call. Additionally, the diag318 info resets must be handled via userspace. As such, QEMU will reset this value for each VCPU during a modified clear, load normal, and load clear reset event. Fixes: fabdada9357b ("s390: guest support for diagnose 0x318") Signed-off-by: Collin Walling Message-Id: <20201113221022.257054-1-walling@linux.ibm.com> Reviewed-by: Thomas Huth Reviewed-by: Janosch Frank Signed-off-by: Cornelia Huck --- hw/s390x/s390-virtio-ccw.c | 4 ++++ target/s390x/cpu.c | 7 +++++++ target/s390x/cpu.h | 1 + target/s390x/kvm-stub.c | 4 ++++ target/s390x/kvm.c | 22 +++++++++++++++++----- target/s390x/kvm_s390x.h | 1 + 6 files changed, 34 insertions(+), 5 deletions(-) diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 22222c4fd5ad..4e140bbead93 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -486,6 +486,10 @@ static void s390_machine_reset(MachineState *machine) default: g_assert_not_reached(); } + + CPU_FOREACH(t) { + run_on_cpu(t, s390_do_cpu_set_diag318, RUN_ON_CPU_HOST_ULONG(0)); + } s390_ipl_clear_reset_request(); } =20 diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index 66f5942b5301..7b66718c4423 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -447,6 +447,13 @@ void s390_enable_css_support(S390CPU *cpu) kvm_s390_enable_css_support(cpu); } } + +void s390_do_cpu_set_diag318(CPUState *cs, run_on_cpu_data arg) +{ + if (kvm_enabled()) { + kvm_s390_set_diag318(cs, arg.host_ulong); + } +} #endif =20 static gchar *s390_gdb_arch_name(CPUState *cs) diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h index f875ebf0f491..60d434d5edd5 100644 --- a/target/s390x/cpu.h +++ b/target/s390x/cpu.h @@ -769,6 +769,7 @@ int s390_set_memory_limit(uint64_t new_limit, uint64_t = *hw_limit); void s390_set_max_pagesize(uint64_t pagesize, Error **errp); void s390_cmma_reset(void); void s390_enable_css_support(S390CPU *cpu); +void s390_do_cpu_set_diag318(CPUState *cs, run_on_cpu_data arg); int s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch_id, int vq, bool assign); #ifndef CONFIG_USER_ONLY diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c index aa185017a2a8..9970b5a8c705 100644 --- a/target/s390x/kvm-stub.c +++ b/target/s390x/kvm-stub.c @@ -120,3 +120,7 @@ void kvm_s390_stop_interrupt(S390CPU *cpu) void kvm_s390_restart_interrupt(S390CPU *cpu) { } + +void kvm_s390_set_diag318(CPUState *cs, uint64_t diag318_info) +{ +} diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index baa070fdf7f9..b8385e6b95d3 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -1611,10 +1611,23 @@ static int handle_sw_breakpoint(S390CPU *cpu, struc= t kvm_run *run) return -ENOENT; } =20 +void kvm_s390_set_diag318(CPUState *cs, uint64_t diag318_info) +{ + CPUS390XState *env =3D &S390_CPU(cs)->env; + + /* Feat bit is set only if KVM supports sync for diag318 */ + if (s390_has_feat(S390_FEAT_DIAG_318)) { + env->diag318_info =3D diag318_info; + cs->kvm_run->s.regs.diag318 =3D diag318_info; + cs->kvm_run->kvm_dirty_regs |=3D KVM_SYNC_DIAG318; + } +} + static void handle_diag_318(S390CPU *cpu, struct kvm_run *run) { uint64_t reg =3D (run->s390_sieic.ipa & 0x00f0) >> 4; uint64_t diag318_info =3D run->s.regs.gprs[reg]; + CPUState *t; =20 /* * DIAG 318 can only be enabled with KVM support. As such, let's @@ -1622,13 +1635,12 @@ static void handle_diag_318(S390CPU *cpu, struct kv= m_run *run) */ if (!s390_has_feat(S390_FEAT_DIAG_318)) { kvm_s390_program_interrupt(cpu, PGM_SPECIFICATION); + return; } =20 - cpu->env.diag318_info =3D diag318_info; - - if (can_sync_regs(CPU(cpu), KVM_SYNC_DIAG318)) { - run->s.regs.diag318 =3D diag318_info; - run->kvm_dirty_regs |=3D KVM_SYNC_DIAG318; + CPU_FOREACH(t) { + run_on_cpu(t, s390_do_cpu_set_diag318, + RUN_ON_CPU_HOST_ULONG(diag318_info)); } } =20 diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h index 6ab17c81b73a..25bbe98b2514 100644 --- a/target/s390x/kvm_s390x.h +++ b/target/s390x/kvm_s390x.h @@ -45,5 +45,6 @@ void kvm_s390_set_max_pagesize(uint64_t pagesize, Error *= *errp); void kvm_s390_crypto_reset(void); void kvm_s390_restart_interrupt(S390CPU *cpu); void kvm_s390_stop_interrupt(S390CPU *cpu); +void kvm_s390_set_diag318(CPUState *cs, uint64_t diag318_info); =20 #endif /* KVM_S390X_H */ --=20 2.26.2 From nobody Fri May 3 09:05:11 2024 Delivered-To: importer@patchew.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=1605781497; cv=none; d=zohomail.com; s=zohoarc; b=INExWTzSs/eOro4/Wyw4UvieMzt8nVlXGSSgQVyZ5ODw7pWHqSJE/aAUZ2pE6QP3DKpGUh8giEbCLEwhgmIGFEblHBtWvK/uwA2CJMTV77WAH9tV3x9s+uoGmjGcIMasXpVCoBMuNcysuspDOVbf+A44l+/n7PDQ5txXtjH6SAg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605781497; 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=zuVWm2w10Zr6XqrL9ypcZsqyy3otSI98W6NTCepA+4s=; b=jg1qupydCihb+M7pt/We4s6BlMqunnJB42ale03BZtyHweYcPDZfNQpfnAJ+X6d77QWP6eYFGNuDVxtJDOpiYPUK2u3orRegAq8t0AES/d8+swVEkH2oyOFoSC8zOkBxq+sFykAxvMaPC1hu/3vAZrQyUrgeREqLT9edkcvBh3w= 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 1605781497163342.9640983627604; Thu, 19 Nov 2020 02:24:57 -0800 (PST) Received: from localhost ([::1]:46102 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kfh7W-0002Yf-Tm for importer@patchew.org; Thu, 19 Nov 2020 05:24:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49048) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kfh6J-0001FL-HI for qemu-devel@nongnu.org; Thu, 19 Nov 2020 05:23:39 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:24423) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kfh6H-0004GI-Pc for qemu-devel@nongnu.org; Thu, 19 Nov 2020 05:23:39 -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-507-mbI9BjUSMAe4z4rPWLiA0A-1; Thu, 19 Nov 2020 05:23:34 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 298F218B613D; Thu, 19 Nov 2020 10:23:33 +0000 (UTC) Received: from gondolin.redhat.com (ovpn-113-214.ams2.redhat.com [10.36.113.214]) by smtp.corp.redhat.com (Postfix) with ESMTP id 747AB5D9C0; Thu, 19 Nov 2020 10:23:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605781417; 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=zuVWm2w10Zr6XqrL9ypcZsqyy3otSI98W6NTCepA+4s=; b=IK255Rd2tMZqCBfRZUgtk6f+FHmOcodblH3JZcdh3oFwrE+XD9xUQdA1wX15edE9D5AOTQ kLpgyDgA2GSQVfWRj0ehg4BQ3uV4V9DuIah3ay+Fay8vkPoj5wmtn+euOSRN1jH6qF+rPP NFiiwfRnhEtnMTfW8WFNM2kNlOe3gT0= X-MC-Unique: mbI9BjUSMAe4z4rPWLiA0A-1 From: Cornelia Huck To: Peter Maydell Subject: [PULL for-5.2 2/3] s390x/pci: Unregister listeners before destroying IOMMU address space Date: Thu, 19 Nov 2020 11:23:24 +0100 Message-Id: <20201119102325.1314765-3-cohuck@redhat.com> In-Reply-To: <20201119102325.1314765-1-cohuck@redhat.com> References: <20201119102325.1314765-1-cohuck@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=cohuck@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=216.205.24.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/19 03:44:58 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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 , Matthew Rosato , Pierre Morel , Niklas Schnelle , 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: Matthew Rosato Hot-unplugging a vfio-pci device on s390x causes a QEMU crash: qemu-system-s390x: ../softmmu/memory.c:2772: do_address_space_destroy: Assertion `QTAILQ_EMPTY(&as->listeners)' failed. In s390, the IOMMU address space is freed during device unplug but the associated vfio-pci device may not yet be finalized and therefore may still have a listener registered to the IOMMU address space. Commit a2166410ad74 ("spapr_pci: Unregister listeners before destroying the IOMMU address space") previously resolved this issue for spapr_pci. We are now seeing this in s390x; it would seem the possibility for this issue was already present but based on a bisect commit 2d24a6466154 ("device-core: use RCU for list of children of a bus") has now changed the timing such that it is now readily reproducible. Add logic to ensure listeners are removed before destroying the address space. Reported-by: Niklas Schnelle Signed-off-by: Matthew Rosato Tested-by: Niklas Schnelle Reviewed-by: Pierre Morel Reviewed-by: Thomas Huth Message-Id: <1605562955-21152-1-git-send-email-mjrosato@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/s390-pci-bus.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index 48a3be802f8e..e0dc20ce4a56 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -732,6 +732,13 @@ static void s390_pci_iommu_free(S390pciState *s, PCIBu= s *bus, int32_t devfn) =20 table->iommu[PCI_SLOT(devfn)] =3D NULL; g_hash_table_destroy(iommu->iotlb); + /* + * An attached PCI device may have memory listeners, eg. VFIO PCI. + * The associated subregion will already have been unmapped in + * s390_pci_iommu_disable in response to the guest deconfigure request. + * Remove the listeners now before destroying the address space. + */ + address_space_remove_listeners(&iommu->as); address_space_destroy(&iommu->as); object_unparent(OBJECT(&iommu->mr)); object_unparent(OBJECT(iommu)); --=20 2.26.2 From nobody Fri May 3 09:05:11 2024 Delivered-To: importer@patchew.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=1605781618; cv=none; d=zohomail.com; s=zohoarc; b=G2pkQsPQ3QAUycUla+NgsGiKzsL1AU5hqMBwA55CFbDDO17AC8fRLPzH69TiSkgGkHqKivmMxVtzRLGHetjEWurouos+15+4mj6GZxU+uJSqCiuNP6C2lUF+6PmnIh3/T0KsR1jwdVCVLRrXsrFDto+vtNu6AzD8RdQRPwUnjhg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605781618; 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=wlwNaN8UpntTiAbOXepcLhrjKAwc4+uHiBtyiqW63o8=; b=iTAyXLO/A70TycYQduw+vMZbEW3JUS638tILcyhypR352/abfhZbiK+xNhw7CXSYq18O/XCRWvtmCW9AX6SkG0Cd2hhXDs5iSB7cJwRbh4oXYccQB5l2rtaDriL4OiXnhXO7JVvLtQZZfwuvEstxvytfYPFzhaJLkoZ7IcCk+ME= 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 1605781618181141.54655266274153; Thu, 19 Nov 2020 02:26:58 -0800 (PST) Received: from localhost ([::1]:51942 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kfh9V-00055C-6p for importer@patchew.org; Thu, 19 Nov 2020 05:26:57 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49110) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kfh6Q-0001Ud-TH for qemu-devel@nongnu.org; Thu, 19 Nov 2020 05:23:46 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:55590) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kfh6O-0004Im-Ix for qemu-devel@nongnu.org; Thu, 19 Nov 2020 05:23:46 -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-305-TKxTy9XXNL-IefN3cXYhZw-1; Thu, 19 Nov 2020 05:23:39 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5D73418B613F; Thu, 19 Nov 2020 10:23:38 +0000 (UTC) Received: from gondolin.redhat.com (ovpn-113-214.ams2.redhat.com [10.36.113.214]) by smtp.corp.redhat.com (Postfix) with ESMTP id 75FB75D9C0; Thu, 19 Nov 2020 10:23:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605781423; 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=wlwNaN8UpntTiAbOXepcLhrjKAwc4+uHiBtyiqW63o8=; b=dvzrQfP6tw00ZpGZEwy/YB3yDXfLUq/w44V+8qHoBlFa1bmYyfpcz4HwM4w4rjUTKiUzkz 8cJEEZju8weOy5mPZM4F+s77QBahVRnm3yIxdskAdd9aSnuwAkt2A1G6/+TlfjBMM29kZI gqWy3o+VcwvIIU2aVt+xxV0Jv2BWNYA= X-MC-Unique: TKxTy9XXNL-IefN3cXYhZw-1 From: Cornelia Huck To: Peter Maydell Subject: [PULL for-5.2 3/3] s390x/pci: fix endianness issues Date: Thu, 19 Nov 2020 11:23:25 +0100 Message-Id: <20201119102325.1314765-4-cohuck@redhat.com> In-Reply-To: <20201119102325.1314765-1-cohuck@redhat.com> References: <20201119102325.1314765-1-cohuck@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=cohuck@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=216.205.24.124; envelope-from=cohuck@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/19 03:44:58 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action 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 , qemu-s390x@nongnu.org, Cornelia Huck , qemu-devel@nongnu.org, Matthew Rosato 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" The zPCI group and function structures are big endian. However, we do not consistently store them as big endian locally, and are missing some conversions. Let's just store the structures as host endian instead and convert to big endian when actually handling the instructions retrieving the data. Also fix the layout of ClpReqQueryPciGrp: g is actually only 8 bit. This also fixes accesses on little endian hosts, and makes accesses on big endian hosts consistent. Fixes: 28dc86a07299 ("s390x/pci: use a PCI Group structure") Fixes: 9670ee752727 ("s390x/pci: use a PCI Function structure") Fixes: 1e7552ff5c34 ("s390x/pci: get zPCI function info from host") Signed-off-by: Cornelia Huck Tested-by: Matthew Rosato Tested-by: Thomas Huth Reviewed-by: Matthew Rosato Reviewed-by: Thomas Huth Message-Id: <20201118104202.1301363-1-cohuck@redhat.com> --- hw/s390x/s390-pci-bus.c | 10 +++++----- hw/s390x/s390-pci-inst.c | 16 ++++++++++++++-- hw/s390x/s390-pci-vfio.c | 12 ++++++------ include/hw/s390x/s390-pci-clp.h | 8 ++++---- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index e0dc20ce4a56..05f7460aec9b 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -777,11 +777,11 @@ static void s390_pci_init_default_group(void) group =3D s390_group_create(ZPCI_DEFAULT_FN_GRP); resgrp =3D &group->zpci_group; resgrp->fr =3D 1; - stq_p(&resgrp->dasm, 0); - stq_p(&resgrp->msia, ZPCI_MSI_ADDR); - stw_p(&resgrp->mui, DEFAULT_MUI); - stw_p(&resgrp->i, 128); - stw_p(&resgrp->maxstbl, 128); + resgrp->dasm =3D 0; + resgrp->msia =3D ZPCI_MSI_ADDR; + resgrp->mui =3D DEFAULT_MUI; + resgrp->i =3D 128; + resgrp->maxstbl =3D 128; resgrp->version =3D 0; } =20 diff --git a/hw/s390x/s390-pci-inst.c b/hw/s390x/s390-pci-inst.c index 58cd041d17fb..70bfd91bf70e 100644 --- a/hw/s390x/s390-pci-inst.c +++ b/hw/s390x/s390-pci-inst.c @@ -281,7 +281,13 @@ int clp_service_call(S390CPU *cpu, uint8_t r2, uintptr= _t ra) goto out; } =20 - memcpy(resquery, &pbdev->zpci_fn, sizeof(*resquery)); + stq_p(&resquery->sdma, pbdev->zpci_fn.sdma); + stq_p(&resquery->edma, pbdev->zpci_fn.edma); + stw_p(&resquery->pchid, pbdev->zpci_fn.pchid); + resquery->flags =3D pbdev->zpci_fn.flags; + resquery->pfgid =3D pbdev->zpci_fn.pfgid; + stl_p(&resquery->fid, pbdev->zpci_fn.fid); + stl_p(&resquery->uid, pbdev->zpci_fn.uid); =20 for (i =3D 0; i < PCI_BAR_COUNT; i++) { uint32_t data =3D pci_get_long(pbdev->pdev->config + @@ -312,7 +318,13 @@ int clp_service_call(S390CPU *cpu, uint8_t r2, uintptr= _t ra) stw_p(&resgrp->hdr.rsp, CLP_RC_QUERYPCIFG_PFGID); goto out; } - memcpy(resgrp, &group->zpci_group, sizeof(ClpRspQueryPciGrp)); + resgrp->fr =3D group->zpci_group.fr; + stq_p(&resgrp->dasm, group->zpci_group.dasm); + stq_p(&resgrp->msia, group->zpci_group.msia); + stw_p(&resgrp->mui, group->zpci_group.mui); + stw_p(&resgrp->i, group->zpci_group.i); + stw_p(&resgrp->maxstbl, group->zpci_group.maxstbl); + resgrp->version =3D group->zpci_group.version; stw_p(&resgrp->hdr.rsp, CLP_RC_OK); break; } diff --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c index d5c78063b5bc..9296e1bb6efa 100644 --- a/hw/s390x/s390-pci-vfio.c +++ b/hw/s390x/s390-pci-vfio.c @@ -156,12 +156,12 @@ static void s390_pci_read_group(S390PCIBusDevice *pbd= ev, if (cap->flags & VFIO_DEVICE_INFO_ZPCI_FLAG_REFRESH) { resgrp->fr =3D 1; } - stq_p(&resgrp->dasm, cap->dasm); - stq_p(&resgrp->msia, cap->msi_addr); - stw_p(&resgrp->mui, cap->mui); - stw_p(&resgrp->i, cap->noi); - stw_p(&resgrp->maxstbl, cap->maxstbl); - stb_p(&resgrp->version, cap->version); + resgrp->dasm =3D cap->dasm; + resgrp->msia =3D cap->msi_addr; + resgrp->mui =3D cap->mui; + resgrp->i =3D cap->noi; + resgrp->maxstbl =3D cap->maxstbl; + resgrp->version =3D cap->version; } } =20 diff --git a/include/hw/s390x/s390-pci-clp.h b/include/hw/s390x/s390-pci-cl= p.h index ea2b1378cd5a..96b8e3f1331b 100644 --- a/include/hw/s390x/s390-pci-clp.h +++ b/include/hw/s390x/s390-pci-clp.h @@ -144,10 +144,10 @@ typedef struct ClpReqQueryPciGrp { ClpReqHdr hdr; uint32_t fmt; uint64_t reserved1; -#define CLP_REQ_QPCIG_MASK_PFGID 0xff - uint32_t g; - uint32_t reserved2; - uint64_t reserved3; + uint8_t reserved2[3]; + uint8_t g; + uint32_t reserved3; + uint64_t reserved4; } QEMU_PACKED ClpReqQueryPciGrp; =20 /* Query PCI function group response */ --=20 2.26.2