Commit aaae2863 authored by Ilpo Järvinen's avatar Ilpo Järvinen Committed by Bjorn Helgaas
Browse files

PCI: Refactor remove_dev_resources() to use pbus_select_window()



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: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Link: https://patch.msgid.link/20250829131113.36754-22-ilpo.jarvinen@linux.intel.com
parent 4292a1e4
Loading
Loading
Loading
Loading
+9 −25
Original line number Diff line number Diff line
@@ -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);
	}
}