]> www.infradead.org Git - users/hch/misc.git/commitdiff
PCI: Refactor remove_dev_resources() to use pbus_select_window()
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Fri, 29 Aug 2025 13:11:10 +0000 (16:11 +0300)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 16 Sep 2025 16:19:59 +0000 (11:19 -0500)
Convert remove_dev_resources() to use pbus_select_window(). As 'available'
is not the real resources, the index has to be adjusted as only bridge
resource counterparts are present in the 'available' array.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://patch.msgid.link/20250829131113.36754-22-ilpo.jarvinen@linux.intel.com
drivers/pci/setup-bus.c

index 3bc329b1b923e95cd7e2048597a362bf6fadf1bf..cb91c6cb4d326e9b94f79c7310b0e851a61ce2f4 100644 (file)
@@ -2062,34 +2062,18 @@ static void remove_dev_resource(struct resource *avail, struct pci_dev *dev,
 static void remove_dev_resources(struct pci_dev *dev,
                                 struct resource available[PCI_P2P_BRIDGE_RESOURCE_NUM])
 {
-       struct resource *mmio_pref = &available[PCI_BUS_BRIDGE_PREF_MEM_WINDOW];
-       struct resource *res;
+       struct resource *res, *b_win;
+       int idx;
 
        pci_dev_for_each_resource(dev, res) {
-               if (resource_type(res) == IORESOURCE_IO) {
-                       remove_dev_resource(&available[PCI_BUS_BRIDGE_IO_WINDOW],
-                                           dev, res);
-               } else if (resource_type(res) == IORESOURCE_MEM) {
+               b_win = pbus_select_window(dev->bus, res);
+               if (!b_win)
+                       continue;
 
-                       /*
-                        * Make sure prefetchable memory is reduced from
-                        * the correct resource. Specifically we put 32-bit
-                        * prefetchable memory in non-prefetchable window
-                        * if there is a 64-bit prefetchable window.
-                        *
-                        * See comments in __pci_bus_size_bridges() for
-                        * more information.
-                        */
-                       if ((res->flags & IORESOURCE_PREFETCH) &&
-                           ((res->flags & IORESOURCE_MEM_64) ==
-                            (mmio_pref->flags & IORESOURCE_MEM_64))) {
-                               remove_dev_resource(&available[PCI_BUS_BRIDGE_PREF_MEM_WINDOW],
-                                                   dev, res);
-                       } else {
-                               remove_dev_resource(&available[PCI_BUS_BRIDGE_MEM_WINDOW],
-                                                   dev, res);
-                       }
-               }
+               idx = pci_resource_num(dev->bus->self, b_win);
+               idx -= PCI_BRIDGE_RESOURCES;
+
+               remove_dev_resource(&available[idx], dev, res);
        }
 }