Skip to content

Commit

Permalink
x86/PCI: put busn resource in pci_root_info for native host bridge dr…
Browse files Browse the repository at this point in the history
…ivers

Add the host bridge bus number aperture to the resource list.
Like the MMIO and I/O port apertures, this will be used when assigning
resources to hot-added devices or in the case of conflicts.

[bhelgaas: changelog, tidy printk]
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
  • Loading branch information
Yinghai Lu authored and Bjorn Helgaas committed Jun 13, 2012
1 parent 5c1d81d commit a10bb12
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 9 deletions.
7 changes: 3 additions & 4 deletions arch/x86/pci/amd_bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,6 @@ static int __init early_fill_mp_bus_info(void)
link = (reg >> 8) & 0x03;

info = alloc_pci_root_info(min_bus, max_bus, node, link);
sprintf(info->name, "PCI Bus #%02x", min_bus);
}

/* get the default node and link for left over res */
Expand Down Expand Up @@ -300,9 +299,9 @@ static int __init early_fill_mp_bus_info(void)
int busnum;
struct pci_root_res *root_res;

busnum = info->bus_min;
printk(KERN_DEBUG "bus: [%02x, %02x] on node %x link %x\n",
info->bus_min, info->bus_max, info->node, info->link);
busnum = info->busn.start;
printk(KERN_DEBUG "bus: %pR on node %x link %x\n",
&info->busn, info->node, info->link);
list_for_each_entry(root_res, &info->resources, list)
printk(KERN_DEBUG "bus: %02x %pR\n",
busnum, &root_res->res);
Expand Down
22 changes: 19 additions & 3 deletions arch/x86/pci/bus_numa.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ static struct pci_root_info *x86_find_pci_root_info(int bus)
return NULL;

list_for_each_entry(info, &pci_root_infos, list)
if (info->bus_min == bus)
if (info->busn.start == bus)
return info;

return NULL;
Expand All @@ -24,13 +24,25 @@ void x86_pci_root_bus_resources(int bus, struct list_head *resources)
{
struct pci_root_info *info = x86_find_pci_root_info(bus);
struct pci_root_res *root_res;
struct pci_host_bridge_window *window;
bool found = false;

if (!info)
goto default_resources;

printk(KERN_DEBUG "PCI: root bus %02x: hardware-probed resources\n",
bus);

/* already added by acpi ? */
list_for_each_entry(window, resources, list)
if (window->res->flags & IORESOURCE_BUS) {
found = true;
break;
}

if (!found)
pci_add_resource(resources, &info->busn);

list_for_each_entry(root_res, &info->resources, list) {
struct resource *res;
struct resource *root;
Expand Down Expand Up @@ -66,9 +78,13 @@ struct pci_root_info __init *alloc_pci_root_info(int bus_min, int bus_max,
if (!info)
return info;

sprintf(info->name, "PCI Bus #%02x", bus_min);

INIT_LIST_HEAD(&info->resources);
info->bus_min = bus_min;
info->bus_max = bus_max;
info->busn.name = info->name;
info->busn.start = bus_min;
info->busn.end = bus_max;
info->busn.flags = IORESOURCE_BUS;
info->node = node;
info->link = link;

Expand Down
3 changes: 1 addition & 2 deletions arch/x86/pci/bus_numa.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ struct pci_root_info {
struct list_head list;
char name[12];
struct list_head resources;
int bus_min;
int bus_max;
struct resource busn;
int node;
int link;
};
Expand Down

0 comments on commit a10bb12

Please sign in to comment.