Need to use it for looping registered host_bridge, and kill pci_root_buses list.
Signed-off-by: Yinghai Lu <ying...@kernel.org> Cc: Mauro Carvalho Chehab <mche...@redhat.com> Cc: Doug Thompson <dougthomp...@xmission.com> Cc: linux-e...@vger.kernel.org Cc: x...@kernel.org Cc: David Airlie <airl...@linux.ie> Cc: dri-devel@lists.freedesktop.org Cc: "David S. Miller" <da...@davemloft.net> Cc: sparcli...@vger.kernel.org Cc: Tony Luck <tony.l...@intel.com> Cc: Fenghua Yu <fenghua...@intel.com> Cc: linux-i...@vger.kernel.org Cc: linux-al...@sgi.com Cc: Richard Henderson <r...@twiddle.net> Cc: Ivan Kokshaysky <i...@jurassic.park.msu.ru> Cc: Matt Turner <matts...@gmail.com> Cc: linux-al...@vger.kernel.org Cc: Russell King <li...@arm.linux.org.uk> Cc: linux-arm-ker...@lists.infradead.org Cc: David Howells <dhowe...@redhat.com> Cc: Michal Simek <mon...@monstr.eu> Cc: microblaze-ucli...@itee.uq.edu.au Cc: Koichi Yasutake <yasutake.koi...@jp.panasonic.com> Cc: linux-am33-l...@redhat.com Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org> Cc: Paul Mackerras <pau...@samba.org> Cc: linuxppc-...@lists.ozlabs.org --- 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)) -- 1.7.10.4 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel