From nobody Fri May 3 12:05:00 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1490935724743564.4058575414608; Thu, 30 Mar 2017 21:48:44 -0700 (PDT) Received: from localhost ([::1]:38847 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ctoUM-00059i-3x for importer@patchew.org; Fri, 31 Mar 2017 00:48:42 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34630) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ctoTW-0004sr-OM for qemu-devel@nongnu.org; Fri, 31 Mar 2017 00:47:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ctoTT-0007Rm-LL for qemu-devel@nongnu.org; Fri, 31 Mar 2017 00:47:50 -0400 Received: from ozlabs.ru ([107.173.13.209]:53518) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ctoTT-0007Qw-FZ for qemu-devel@nongnu.org; Fri, 31 Mar 2017 00:47:47 -0400 Received: from vpl2.ozlabs.ibm.com (localhost [IPv6:::1]) by ozlabs.ru (Postfix) with ESMTP id A4FE53A60054; Fri, 31 Mar 2017 00:47:20 -0400 (EDT) From: Alexey Kardashevskiy To: qemu-devel@nongnu.org Date: Fri, 31 Mar 2017 15:47:11 +1100 Message-Id: <20170331044711.21749-1-aik@ozlabs.ru> X-Mailer: git-send-email 2.11.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 107.173.13.209 Subject: [Qemu-devel] [PATCH qemu] pci: Only unmap bus_master_enabled_region if was added previously X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Michael S. Tsirkin" , Alexey Kardashevskiy , Max Reitz , Marcel Apfelbaum , Paolo Bonzini , John Snow Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Normally pci_init_bus_master() would be called either via bus->machine_done.notify or directly from do_pci_register_device(). However if a device's realize() failed, pci_init_bus_master() is not called, and do_pci_unregister_device() fails on memory_region_del_subregion() as it was not mapped. This adds a check that subregion was mapped before unmapping it. Fixes: c53598ed18e4 ("pci: Add missing drop of bus master AS reference") Signed-off-by: Alexey Kardashevskiy Acked-by: Paolo Bonzini Reviewed-by: Marcel Apfelbaum Reviewed-by: Max Reitz Tested-by: John Snow --- This is to pass iotest 051 which does run QEMU like this: ppc64-softmmu/qemu-system-ppc64 -nodefaults -machine accel=3Dqtest -nograph= ic -monitor stdio -serial none -drive if=3Dvirtio which normally fails with: qemu-system-ppc64: -drive if=3Dvirtio: Device needs media, but drive is emp= ty or asserts (without this patch): qemu-system-ppc64: /home/aik/p/qemu-kvm/memory.c:2118: memory_region_del_su= bregion: Assertion `subregion->container =3D=3D mr' failed. --- hw/pci/pci.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index bd8043c460..259483b1c0 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -869,8 +869,10 @@ static void do_pci_unregister_device(PCIDevice *pci_de= v) pci_dev->bus->devices[pci_dev->devfn] =3D NULL; pci_config_free(pci_dev); =20 - memory_region_del_subregion(&pci_dev->bus_master_container_region, - &pci_dev->bus_master_enable_region); + if (memory_region_is_mapped(&pci_dev->bus_master_enable_region)) { + memory_region_del_subregion(&pci_dev->bus_master_container_region, + &pci_dev->bus_master_enable_region); + } address_space_destroy(&pci_dev->bus_master_as); } =20 --=20 2.11.0