]> git.hungrycats.org Git - linux/commitdiff
[PATCH] alpha pcibios_claim_console_setup fix
authorIvan Kokshaysky <ink@jurassic.park.msu.ru>
Thu, 6 Mar 2003 01:36:37 +0000 (17:36 -0800)
committerRichard Henderson <rth@kanga.twiddle.net>
Thu, 6 Mar 2003 01:36:37 +0000 (17:36 -0800)
pcibios_claim_console_setup() doesn't look behind PCI-PCI bridges.

Noticed by Anton Blanchard.

Ivan.

arch/alpha/kernel/pci.c

index 73058333241184e1c7089a61fa1f937ec9a364ac..3b99a1d128788a20026e90918cdebb590b50fbcc 100644 (file)
@@ -392,6 +392,29 @@ pcibios_set_master(struct pci_dev *dev)
        pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64);
 }
 
+static void __init
+pcibios_claim_one_bus(struct pci_bus *b)
+{
+       struct list_head *ld;
+       struct pci_bus *child_bus;
+
+       for (ld = b->devices.next; ld != &b->devices; ld = ld->next) {
+               struct pci_dev *dev = pci_dev_b(ld);
+               int i;
+
+               for (i = 0; i < PCI_NUM_RESOURCES; i++) {
+                       struct resource *r = &dev->resource[i];
+
+                       if (r->parent || !r->start || !r->flags)
+                               continue;
+                       pci_claim_resource(dev, i);
+               }
+       }
+
+       list_for_each_entry(child_bus, &b->children, node)
+               pcibios_claim_one_bus(child_bus);
+}
+
 static void __init
 pcibios_claim_console_setup(void)
 {
@@ -399,20 +422,7 @@ pcibios_claim_console_setup(void)
 
        for(lb = pci_root_buses.next; lb != &pci_root_buses; lb = lb->next) {
                struct pci_bus *b = pci_bus_b(lb);
-               struct list_head *ld;
-
-               for (ld = b->devices.next; ld != &b->devices; ld = ld->next) {
-                       struct pci_dev *dev = pci_dev_b(ld);
-                       int i;
-
-                       for (i = 0; i < PCI_NUM_RESOURCES; i++) {
-                               struct resource *r = &dev->resource[i];
-
-                               if (r->parent || !r->start || !r->flags)
-                                       continue;
-                               pci_claim_resource(dev, i);
-                       }
-               }
+               pcibios_claim_one_bus(b);
        }
 }