From patchwork Mon Jan 28 01:54:07 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yinghai Lu X-Patchwork-Id: 2052881 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 404993FD49 for ; Mon, 28 Jan 2013 01:54:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756529Ab3A1Byc (ORCPT ); Sun, 27 Jan 2013 20:54:32 -0500 Received: from userp1040.oracle.com ([156.151.31.81]:49604 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756329Ab3A1Byc (ORCPT ); Sun, 27 Jan 2013 20:54:32 -0500 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by userp1040.oracle.com (Sentrion-MTA-4.2.2/Sentrion-MTA-4.2.2) with ESMTP id r0S1sFrB015853 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 28 Jan 2013 01:54:15 GMT Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r0S1sEGO002185 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 28 Jan 2013 01:54:14 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by acsmt357.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id r0S1sEHo011989; Sun, 27 Jan 2013 19:54:14 -0600 Received: from linux-siqj.site (/75.36.251.60) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sun, 27 Jan 2013 17:54:13 -0800 From: Yinghai Lu To: Bjorn Helgaas , Jiang Liu , "Rafael J. Wysocki" , Taku Izumi , Toshi Kani Cc: "Greg Kroah-Hartman" , Russell King , linux-pci@vger.kernel.org, Yinghai Lu Subject: [PATCH v3 02/22] PCI: Add dummy bus_type for pci_host_bridge Date: Sun, 27 Jan 2013 17:54:07 -0800 Message-Id: <1359338050-22735-2-git-send-email-yinghai@kernel.org> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1359338050-22735-1-git-send-email-yinghai@kernel.org> References: <1359338050-22735-1-git-send-email-yinghai@kernel.org> X-Source-IP: acsinet21.oracle.com [141.146.126.237] Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Need to use it for looping registered host_bridge, and kill pci_root_buses list. Signed-off-by: Yinghai Lu --- drivers/pci/pci-driver.c | 11 ++++++++++- drivers/pci/probe.c | 1 + include/linux/pci.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index acdcc3c..9fb004b 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -1278,11 +1278,20 @@ struct bus_type pci_bus_type = { .pm = PCI_PM_OPS_PTR, }; +struct bus_type pci_host_bridge_bus_type = { + .name = "pci_host_bridge", +}; + +static int __init pci_host_bridge_driver_init(void) +{ + return bus_register(&pci_host_bridge_bus_type); +} +postcore_initcall(pci_host_bridge_driver_init); + static int __init pci_driver_init(void) { return bus_register(&pci_bus_type); } - postcore_initcall(pci_driver_init); EXPORT_SYMBOL_GPL(pci_add_dynid); diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index ef50154..04ecf0d 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -1692,6 +1692,7 @@ struct pci_bus *pci_create_root_bus(struct device *parent, int bus, goto err_out; bridge->dev.parent = parent; + bridge->dev.bus = &pci_host_bridge_bus_type; bridge->dev.release = pci_release_host_bridge_dev; dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(b), bus); error = pcibios_root_bridge_prepare(bridge); diff --git a/include/linux/pci.h b/include/linux/pci.h index 056d3d6..9da06ec 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -669,6 +669,7 @@ enum pcie_bus_config_types { extern enum pcie_bus_config_types pcie_bus_config; +extern struct bus_type pci_host_bridge_bus_type; extern struct bus_type pci_bus_type; /* Do NOT directly access these two variables, unless you are arch specific pci @@ -740,6 +741,7 @@ void pci_stop_root_bus(struct pci_bus *bus); void pci_remove_root_bus(struct pci_bus *bus); void pci_setup_cardbus(struct pci_bus *bus); extern void pci_sort_breadthfirst(void); +#define dev_is_pci_host_bridge(d) ((d)->bus == &pci_host_bridge_bus_type) #define dev_is_pci(d) ((d)->bus == &pci_bus_type) #define dev_is_pf(d) ((dev_is_pci(d) ? to_pci_dev(d)->is_physfn : false)) #define dev_num_vf(d) ((dev_is_pci(d) ? pci_num_vf(to_pci_dev(d)) : 0))