From patchwork Thu Aug 18 03:22:31 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wen Congyang X-Patchwork-Id: 110494 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id CE318B6F62 for ; Thu, 18 Aug 2011 13:23:55 +1000 (EST) Received: from localhost ([::1]:34388 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QttCy-0001i3-6f for incoming@patchwork.ozlabs.org; Wed, 17 Aug 2011 23:23:52 -0400 Received: from eggs.gnu.org ([140.186.70.92]:41872) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QttCr-0001hk-Ct for qemu-devel@nongnu.org; Wed, 17 Aug 2011 23:23:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QttCp-0006cj-Ft for qemu-devel@nongnu.org; Wed, 17 Aug 2011 23:23:45 -0400 Received: from [222.73.24.84] (port=64165 helo=song.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QttCn-0006bh-Lc for qemu-devel@nongnu.org; Wed, 17 Aug 2011 23:23:43 -0400 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 57CF0170126; Thu, 18 Aug 2011 11:23:26 +0800 (CST) Received: from mailserver.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id p7I3NOpo029516; Thu, 18 Aug 2011 11:23:25 +0800 Received: from [10.167.225.226] ([10.167.225.226]) by mailserver.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.1FP4) with ESMTP id 2011081811221452-41750 ; Thu, 18 Aug 2011 11:22:14 +0800 Message-ID: <4E4C8577.5000608@cn.fujitsu.com> Date: Thu, 18 Aug 2011 11:22:31 +0800 From: Wen Congyang User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100413 Fedora/3.0.4-2.fc13 Thunderbird/3.0.4 MIME-Version: 1.0 To: "Michael S. Tsirkin" , qemu-devel@nongnu.org, Kevin Wolf , Anthony Liguori , Isaku Yamahata , Avi Kivity References: <20110704094358.GA10960@redhat.com> <4E4B7DE1.3050405@cn.fujitsu.com> In-Reply-To: <4E4B7DE1.3050405@cn.fujitsu.com> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2011-08-18 11:22:14, Serialize by Router on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2011-08-18 11:22:16, Serialize complete at 2011-08-18 11:22:16 X-detected-operating-system: by eggs.gnu.org: FreeBSD 6.x (1) X-Received-From: 222.73.24.84 Subject: Re: [Qemu-devel] [PATCH] pci: add standard bridge device 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 At 08/17/2011 04:37 PM, Wen Congyang Write: > At 07/04/2011 05:43 PM, Michael S. Tsirkin Write: >> This adds support for a standard pci to pci bridge, >> enabling support for more than 32 PCI devices in the system. >> To use, specify the device id as a 'bus' option. >> Example: >> -device pci-bridge,id=bridge1 \ >> -netdev user,id=u \ >> -device ne2k_pci,id=net2,bus=bridge1,netdev=u >> >> TODO: device hotplug support. > > I try this patch, and found that when I use pci bridge, qemu will core dump. > > Here is my command line: > /usr/local2/bin/qemu-system-x86_64 -M pc-0.14 -enable-kvm -m 512 -name vm1 -drive file=/var/lib/libvirt/images/vm1.img,if=none,id=drive-ide0-0-0,format=qcow2,cache=writethrough -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -vnc 0.0.0.0:1 -device pci-bridge,id=bridge1,bus=pci.0,addr=0x08.0x0 -netdev user,id=u -device ne2k_pci,id=net2,bus=bridge1,netdev=u > > Here is the backtrace: > Core was generated by `/usr/local2/bin/qemu-system-x86_64 -M pc-0.14 -enable-kvm -m 512 -name vm1 -dri'. > Program terminated with signal 11, Segmentation fault. > #0 0x0000000000438e34 in memory_region_add_subregion_common (mr=0x0, offset=49152, subregion=0x1de5d58) at /home/wency/source/qemu/memory.c:1152 > 1152 QTAILQ_FOREACH(other, &mr->subregions, subregions_link) { > Missing separate debuginfos, use: debuginfo-install SDL-1.2.14-2.el6.x86_64 celt051-0.5.1.3-0.el6.x86_64 cyrus-sasl-gssapi-2.1.23-8.el6.x86_64 cyrus-sasl-lib-2.1.23-8.el6.x86_64 cyrus-sasl-md5-2.1.23-8.el6.x86_64 cyrus-sasl-plain-2.1.23-8.el6.x86_64 db4-4.7.25-16.el6.x86_64 glib2-2.22.5-6.el6.x86_64 glibc-2.12-1.25.el6.x86_64 keyutils-libs-1.4-1.el6.x86_64 krb5-libs-1.9-9.el6.x86_64 libX11-1.3-2.el6.x86_64 libXau-1.0.5-1.el6.x86_64 libaio-0.3.107-10.el6.x86_64 libattr-2.4.44-4.el6.x86_64 libcom_err-1.41.12-7.el6.x86_64 libcurl-7.19.7-26.el6.x86_64 libgcrypt-1.4.5-5.el6.x86_64 libgpg-error-1.7-3.el6.x86_64 libidn-1.18-2.el6.x86_64 libjpeg-6b-46.el6.x86_64 libpng-1.2.44-1.el6.x86_64 libselinux-2.0.94-5.el6.x86_64 libssh2-1.2.2-7.el6.x86_64 libtasn1-2.3-3.el6.x86_64 libuuid-2.17.2-12.el6.x86_64 libxcb-1.5-1.el6.x86_64 ncurses-libs-5.7-3.20090208.el6.x86_64 nspr-4.8.7-1.el6.x86_64 nss-3.12.9-9.el6.x86_64 nss-softokn-freebl-3.12.9-3.el6.x86_64 nss-util-3.12.9-1.el6.x86_64 openld ap > -2.4.23-15.el6.x86_64 openssl-1.0.0-10.el6.x86_64 pixman-0.18.4-1.el6_0.1.x86_64 spice-server-0.8.0-1.el6.x86_64 zlib-1.2.3-25.el6.x86_64 > (gdb) bt > #0 0x0000000000438e34 in memory_region_add_subregion_common (mr=0x0, offset=49152, subregion=0x1de5d58) at /home/wency/source/qemu/memory.c:1152 > #1 0x0000000000439090 in memory_region_add_subregion_overlap (mr=0x0, offset=49152, subregion=0x1de5d58, priority=1) at /home/wency/source/qemu/memory.c:1194 > #2 0x00000000005c55fe in pci_update_mappings (d=0x1de5900) at /home/wency/source/qemu/hw/pci.c:1063 > #3 0x00000000005c5982 in pci_default_write_config (d=0x1de5900, addr=4, val=0, l=2) at /home/wency/source/qemu/hw/pci.c:1121 > #4 0x00000000005cbfbf in pci_host_config_write_common (pci_dev=0x1de5900, addr=4, limit=256, val=1, len=2) at /home/wency/source/qemu/hw/pci_host.c:54 > #5 0x00000000005cc0d1 in pci_data_write (s=0x1da2b90, addr=2147549188, val=1, len=2) at /home/wency/source/qemu/hw/pci_host.c:75 > #6 0x00000000005cc2b1 in pci_host_data_write (handler=0x1da2b60, addr=3324, val=1, len=2) at /home/wency/source/qemu/hw/pci_host.c:125 > #7 0x000000000042c884 in ioport_simple_writew (opaque=0x1da2b60, addr=3324, value=1) at /home/wency/source/qemu/rwhandler.c:50 > #8 0x0000000000499e85 in ioport_write (index=1, address=3324, data=1) at ioport.c:81 > #9 0x000000000049a8e1 in cpu_outw (addr=3324, val=1) at ioport.c:280 > #10 0x0000000000433c5d in kvm_handle_io (port=3324, data=0x7f0b30f86000, direction=1, size=2, count=1) at /home/wency/source/qemu/kvm-all.c:837 > #11 0x00000000004341c8 in kvm_cpu_exec (env=0x1b7fc70) at /home/wency/source/qemu/kvm-all.c:976 > #12 0x000000000040da99 in cpu_exec_all () at /home/wency/source/qemu/cpus.c:1102 > #13 0x00000000005b60c4 in main_loop () at /home/wency/source/qemu/vl.c:1392 > #14 0x00000000005baa49 in main (argc=20, argv=0x7ffffa6b5a38, envp=0x7ffffa6b5ae0) at /home/wency/source/qemu/vl.c:3356 > > If I do not attach any device on bus bridge1, qemu can work nice. > > Thanks > Wen Congyang > The following patch can fix this problem, but I'm not sure whether it is right. >From 3ce0000e5a14f0ff7aeac148f9416eac6fa7c6ca Mon Sep 17 00:00:00 2001 From: Wen Congyang Date: Thu, 18 Aug 2011 09:33:19 +0800 Subject: [PATCH] PCI_Bridge: use parent bus's address space The pci device may call pci_register_bar() to use PCI bus's address space. But we forget to init PCI bus's address space if it is not bus 0. It will cause qemu crashed. Signed-off-by: Wen Congyang --- hw/pci_bridge.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/hw/pci_bridge.c b/hw/pci_bridge.c index 464d897..df16faa 100644 --- a/hw/pci_bridge.c +++ b/hw/pci_bridge.c @@ -246,6 +246,8 @@ int pci_bridge_initfn(PCIDevice *dev) br->bus_name); sec_bus->parent_dev = dev; sec_bus->map_irq = br->map_irq; + sec_bus->address_space_mem = parent->address_space_mem; + sec_bus->address_space_io = parent->address_space_io; QLIST_INIT(&sec_bus->child); QLIST_INSERT_HEAD(&parent->child, sec_bus, sibling);