PCI: Don't add disabled subtractive decode bus resources
authorBjorn Helgaas <bhelgaas@google.com>
Mon, 14 Apr 2014 22:10:54 +0000 (16:10 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 23 May 2014 16:47:20 +0000 (10:47 -0600)
For a subtractive decode bridge, we previously added and printed all
resources of the primary bus, even if they were not valid.  In the example
below, the bridge 00:1c.3 has no windows enabled, so there are no valid
resources on bus 02.  But since 02:00.0 is subtractive decode bridge, we
add and print all those invalid resources, which don't really make sense:

  pci 0000:00:1c.3: PCI bridge to [bus 02-03]
  pci 0000:02:00.0: PCI bridge to [bus 03] (subtractive decode)
  pci 0000:02:00.0:   bridge window [??? 0x00000000 flags 0x0] (subtractive decode)

Add and print the subtractively-decoded resources only if they are valid.

There's an example in the dmesg log attached to the bugzilla below (but
this patch doesn't fix the bug reported there).

Link: https://bugzilla.kernel.org/show_bug.cgi?id=73141
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/probe.c

index 3bc149b848a88e5bb2cbd8603d1f6ac75ab3c60c..966514010974ca1b9ed5684d1e47d2735a74bbf5 100644 (file)
@@ -475,7 +475,7 @@ void pci_read_bridge_bases(struct pci_bus *child)
 
        if (dev->transparent) {
                pci_bus_for_each_resource(child->parent, res, i) {
-                       if (res) {
+                       if (res && res->flags) {
                                pci_bus_add_resource(child, res,
                                                     PCI_SUBTRACTIVE_DECODE);
                                dev_printk(KERN_DEBUG, &dev->dev,