PCI: build a bus number resource tree for every domain
authorYinghai Lu <yinghai@kernel.org>
Fri, 18 May 2012 01:51:11 +0000 (18:51 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 13 Jun 2012 21:42:22 +0000 (15:42 -0600)
This adds get_pci_domain_busn_res(), which returns the root of the
bus number resource tree for a domain, creating it if necessary.
We will later populate the tree with the bus numbers used by host
bridges and P2P bridges in the domain.

[bhelgaas: changelog]
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/probe.c

index 651b096134dc9644991708e189855eee3f063187..674a477a64864cc9b28e2f0089ece04fe718d169 100644 (file)
 LIST_HEAD(pci_root_buses);
 EXPORT_SYMBOL(pci_root_buses);
 
+static LIST_HEAD(pci_domain_busn_res_list);
+
+struct pci_domain_busn_res {
+       struct list_head list;
+       struct resource res;
+       int domain_nr;
+};
+
+static struct resource *get_pci_domain_busn_res(int domain_nr)
+{
+       struct pci_domain_busn_res *r;
+
+       list_for_each_entry(r, &pci_domain_busn_res_list, list)
+               if (r->domain_nr == domain_nr)
+                       return &r->res;
+
+       r = kzalloc(sizeof(*r), GFP_KERNEL);
+       if (!r)
+               return NULL;
+
+       r->domain_nr = domain_nr;
+       r->res.start = 0;
+       r->res.end = 0xff;
+       r->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED;
+
+       list_add_tail(&r->list, &pci_domain_busn_res_list);
+
+       return &r->res;
+}
+
 static int find_anything(struct device *dev, void *data)
 {
        return 1;