Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753939AbbDGVis (ORCPT ); Tue, 7 Apr 2015 17:38:48 -0400 Received: from mail-ig0-f173.google.com ([209.85.213.173]:38852 "EHLO mail-ig0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753861AbbDGVio (ORCPT ); Tue, 7 Apr 2015 17:38:44 -0400 Date: Tue, 7 Apr 2015 16:38:39 -0500 From: Bjorn Helgaas To: Yijing Wang Cc: Jiang Liu , linux-pci@vger.kernel.org, Yinghai Lu , linux-kernel@vger.kernel.org, Marc Zyngier , linux-arm-kernel@lists.infradead.org, Russell King , dja@axtens.net, x86@kernel.org, Thomas Gleixner , Benjamin Herrenschmidt , Rusty Russell , Tony Luck , linux-ia64@vger.kernel.org, "David S. Miller" , Guan Xuetao , linux-alpha@vger.kernel.org, linux-m68k@vger.kernel.org, Liviu Dudau , Arnd Bergmann , Geert Uytterhoeven Subject: Re: [PATCH v9 06/30] PCI: Separate pci_host_bridge creation out of pci_create_root_bus() Message-ID: <20150407213839.GJ10892@google.com> References: <1428053164-28277-1-git-send-email-wangyijing@huawei.com> <1428053164-28277-8-git-send-email-wangyijing@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1428053164-28277-8-git-send-email-wangyijing@huawei.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2741 Lines: 83 On Fri, Apr 03, 2015 at 05:25:40PM +0800, Yijing Wang wrote: > This patch separate pci_host_bridge creation out > of pci_create_root_bus(), and try to make a generic > pci_host_bridge, then we could make it hold host > bridge specific operations like > pcibios_root_bridge_prepare(). The changes are > transparent to platform host bridge drivers. > > Signed-off-by: Yijing Wang > --- > drivers/pci/host-bridge.c | 52 +++++++++++++++++++++ > drivers/pci/pci.h | 3 + > drivers/pci/probe.c | 113 +++++++++++++++++++++------------------------ > 3 files changed, 108 insertions(+), 60 deletions(-) > > diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c > index 39b2dbe..7d52a0a 100644 > --- a/drivers/pci/host-bridge.c > +++ b/drivers/pci/host-bridge.c > @@ -8,6 +8,58 @@ > > #include "pci.h" > > +static void pci_release_host_bridge_dev(struct device *dev) > +{ > + struct pci_host_bridge *bridge = to_pci_host_bridge(dev); > + > + if (bridge->release_fn) > + bridge->release_fn(bridge); > + > + pci_free_resource_list(&bridge->windows); > + kfree(bridge); > +} > + > +struct pci_host_bridge *pci_create_host_bridge( > + struct device *parent, int domain, int bus, > + struct list_head *resources) > +{ > + int error; > + struct pci_host_bridge *host; > + struct resource_entry *window, *n; > + > + host = kzalloc(sizeof(*host), GFP_KERNEL); > + if (!host) > + return NULL; > + > + host->dev.parent = parent; > + INIT_LIST_HEAD(&host->windows); > + resource_list_for_each_entry_safe(window, n, resources) > + list_move_tail(&window->node, &host->windows); > + /* > + * If support CONFIG_PCI_DOMAINS_GENERIC, use > + * pci_host_assign_domain_nr() to update domain > + * number. > + */ > + host->domain = domain; > + pci_host_assign_domain_nr(host); I think it's a bit confusing that there's another "host->domain =" assignment buried inside pci_host_assign_domain_nr(), so the first assignment is overwritten when CONFIG_PCI_DOMAINS_GENERIC is set. Can you do something like this instead: int pci_host_assign_domain_nr(struct pci_host_bridge *host, int domain) { #ifdef CONFIG_PCI_DOMAINS_GENERIC host->domain = pci_assign_domain_nr(host->dev.parent); #else host->domain = domain; #endif } Then the alternatives (CONFIG_PCI_DOMAINS_GENERIC=y and CONFIG_PCI_DOMAINS_GENERIC being unset) are close together and right at the #ifdef CONFIG_PCI_DOMAINS_GENERIC, so no extra comments are needed. Bjorn -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/