[PATCH] PCI: handle subtractive decode pci-pci bridge better
authorIvan Kokshaysky <ink@jurassic.park.msu.ru>
Tue, 7 Jun 2005 00:07:02 +0000 (04:07 +0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 1 Jul 2005 20:35:50 +0000 (13:35 -0700)
With the number of PCI bus resources increased to 8, we can
handle the subtractive decode PCI-PCI bridge like a normal
bridge, taking into account standard PCI-PCI bridge windows
(resources 0-2). This helps to avoid problems with peer-to-peer DMA
behind such bridges, poor performance for MMIO ranges outside bridge
windows and prefetchable vs. non-prefetchable memory issues.

To reflect the fact that such bridges do forward all addresses to
the secondary bus (transparency), remaining bus resources 3-7 are
linked to resources 0-4 of the primary bus. These resources will be
used as fallback by resource management code if allocation from
standard bridge windows fails for some reason.

Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Acked-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/pci/probe.c

index 9392ff3fb8038058eeff9f417a36142eafcc9927..df3bdae2040f8ce03fdce6a836dc294e15d74afe 100644 (file)
@@ -239,9 +239,8 @@ void __devinit pci_read_bridge_bases(struct pci_bus *child)
 
        if (dev->transparent) {
                printk(KERN_INFO "PCI: Transparent bridge - %s\n", pci_name(dev));
-               for(i = 0; i < PCI_BUS_NUM_RESOURCES; i++)
-                       child->resource[i] = child->parent->resource[i];
-               return;
+               for(i = 3; i < PCI_BUS_NUM_RESOURCES; i++)
+                       child->resource[i] = child->parent->resource[i - 3];
        }
 
        for(i=0; i<3; i++)