PCI: Mark invalid BARs as unassigned
authorBjorn Helgaas <bhelgaas@google.com>
Thu, 12 Mar 2015 17:30:06 +0000 (12:30 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 12 Mar 2015 23:52:12 +0000 (18:52 -0500)
If a BAR is not inside any upstream bridge window, or if it conflicts with
another resource, mark it as IORESOURCE_UNSET so we don't try to use it.
We may be able to assign a different address for it.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/pci/setup-res.c

index b7c3a5ea1fca0a266891d1954321716dc5073e8c..232f9254c11acf5b45d9b20f9fc4169dfad79084 100644 (file)
@@ -120,6 +120,7 @@ int pci_claim_resource(struct pci_dev *dev, int resource)
        if (!root) {
                dev_info(&dev->dev, "can't claim BAR %d %pR: no compatible bridge window\n",
                         resource, res);
+               res->flags |= IORESOURCE_UNSET;
                return -EINVAL;
        }
 
@@ -127,6 +128,7 @@ int pci_claim_resource(struct pci_dev *dev, int resource)
        if (conflict) {
                dev_info(&dev->dev, "can't claim BAR %d %pR: address conflict with %s %pR\n",
                         resource, res, conflict->name, conflict);
+               res->flags |= IORESOURCE_UNSET;
                return -EBUSY;
        }