PCI: Skip allocate_resource() if too little space available
authorBjorn Helgaas <bhelgaas@google.com>
Thu, 8 Dec 2022 19:03:39 +0000 (13:03 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Sat, 10 Dec 2022 16:31:47 +0000 (10:31 -0600)
pci_bus_alloc_from_region() allocates MMIO space by iterating through all
the resources available on the bus.  The available resource might be
reduced if the caller requires 32-bit space or we're avoiding BIOS or E820
areas.

Don't bother calling allocate_resource() if we need more space than is
available in this resource.  This prevents some pointless and annoying
messages about avoided areas.

Link: https://lore.kernel.org/r/20221208190341.1560157-3-helgaas@kernel.org
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
drivers/pci/bus.c

index 3cef835..83ae838 100644 (file)
@@ -197,6 +197,10 @@ static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res,
 
                max = avail.end;
 
+               /* Don't bother if available space isn't large enough */
+               if (size > max - min_used + 1)
+                       continue;
+
                /* Ok, try it out.. */
                ret = allocate_resource(r, res, size, min_used, max,
                                        align, alignf, alignf_data);