pci: don't reassign to ROM res if it is not going to be enabled
authorYinghai Lu <yinghai@kernel.org>
Sun, 28 Feb 2010 23:49:39 +0000 (15:49 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 1 Mar 2010 15:41:55 +0000 (07:41 -0800)
A ROM resource that doesn't fit should not cause us to try to re-assign
all the bus resources.  Nobody generally cares, and re-assigning is
going to just cause way more troubles than it tries to solve.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/pci/setup-bus.c

index bf32f07c4efb7a68504c5348eb9b908281665894..4fe36d2e104930cc99cc7014b27614277d75c9f8 100644 (file)
@@ -101,9 +101,17 @@ static void __assign_resources_sorted(struct resource_list *head,
        for (list = head->next; list;) {
                res = list->res;
                idx = res - &list->dev->resource[0];
+
                if (pci_assign_resource(list->dev, idx)) {
-                       if (fail_head && !pci_is_root_bus(list->dev->bus))
-                               add_to_failed_list(fail_head, list->dev, res);
+                       if (fail_head && !pci_is_root_bus(list->dev->bus)) {
+                               /*
+                                * if the failed res is for ROM BAR, and it will
+                                * be enabled later, don't add it to the list
+                                */
+                               if (!((idx == PCI_ROM_RESOURCE) &&
+                                     (!(res->flags & IORESOURCE_ROM_ENABLE))))
+                                       add_to_failed_list(fail_head, list->dev, res);
+                       }
                        res->start = 0;
                        res->end = 0;
                        res->flags = 0;