From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33920) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDRh1-0003yy-1Y for qemu-devel@nongnu.org; Thu, 16 Jun 2016 03:26:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDRgw-0001kL-TO for qemu-devel@nongnu.org; Thu, 16 Jun 2016 03:26:22 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53165) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDRgw-0001kH-N0 for qemu-devel@nongnu.org; Thu, 16 Jun 2016 03:26:18 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 567557F0A2 for ; Thu, 16 Jun 2016 07:26:18 +0000 (UTC) References: <1466013391-16028-1-git-send-email-armbru@redhat.com> <1466013391-16028-2-git-send-email-armbru@redhat.com> From: Marcel Apfelbaum Message-ID: <57625497.9080909@redhat.com> Date: Thu, 16 Jun 2016 10:26:15 +0300 MIME-Version: 1.0 In-Reply-To: <1466013391-16028-2-git-send-email-armbru@redhat.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/2] piix: Set I440FXState member pci_info.w32 in one place List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster , qemu-devel@nongnu.org Cc: mst@redhat.com, imammedo@redhat.com, ehabkost@redhat.com On 06/15/2016 08:56 PM, Markus Armbruster wrote: > Range pci_info.w32 records the location of the PCI hole. > > It's initialized to empty when QOM zeroes I440FXState. That's a fine > value for a still unknown PCI hole. > > i440fx_init() sets pci_info.w32.begin = below_4g_mem_size. Changes > the PCI hole from empty to [below_4g_mem_size, UINT64_MAX]. That's a > bogus value. > > i440fx_pcihost_initfn() sets pci_info.end = IO_APIC_DEFAULT_ADDRESS. > Since i440fx_init() ran already, this changes the PCI hole to > [below_4g_mem_size, IO_APIC_DEFAULT_ADDRESS-1]. That's the correct > value. > > Setting the bounds of the PCI hole in two separate places is > confusing, and begs the question whether the bogus intermediate value > could be used by something, or what would happen if we somehow managed > to realize an i440FX device without having run the board init function > i440fx_init() first. > > Avoid the confusion by setting the (constant) upper bound along with > the lower bound in i440fx_init(). > > Signed-off-by: Markus Armbruster > --- > hw/pci-host/piix.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c > index df2b0e2..c63c424 100644 > --- a/hw/pci-host/piix.c > +++ b/hw/pci-host/piix.c > @@ -263,7 +263,6 @@ static void i440fx_pcihost_get_pci_hole64_end(Object *obj, Visitor *v, > static void i440fx_pcihost_initfn(Object *obj) > { > PCIHostState *s = PCI_HOST_BRIDGE(obj); > - I440FXState *d = I440FX_PCI_HOST_BRIDGE(obj); > > memory_region_init_io(&s->conf_mem, obj, &pci_host_conf_le_ops, s, > "pci-conf-idx", 4); > @@ -285,8 +284,6 @@ static void i440fx_pcihost_initfn(Object *obj) > object_property_add(obj, PCI_HOST_PROP_PCI_HOLE64_END, "int", > i440fx_pcihost_get_pci_hole64_end, > NULL, NULL, NULL, NULL); > - > - d->pci_info.w32.end = IO_APIC_DEFAULT_ADDRESS; > } > > static void i440fx_pcihost_realize(DeviceState *dev, Error **errp) > @@ -348,6 +345,7 @@ PCIBus *i440fx_init(const char *host_type, const char *pci_type, > > i440fx = I440FX_PCI_HOST_BRIDGE(dev); > i440fx->pci_info.w32.begin = below_4g_mem_size; > + i440fx->pci_info.w32.end = IO_APIC_DEFAULT_ADDRESS; > > /* setup pci memory mapping */ > pc_pci_as_mapping_init(OBJECT(f), f->system_memory, > Reviewed-by: Marcel Apfelbaum Thanks, Marcel