Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac8ab54a authored by Paul Mundt's avatar Paul Mundt
Browse files

sh: Bail out early on PCI resource conflicts.



Presently we just call in to request_resource() for the ioport and iomem
resources without checking for errors. This has already hidden a couple
of bugs, so add some error handling in for good measure.

Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent a45635df
Loading
Loading
Loading
Loading
+9 −13
Original line number Diff line number Diff line
@@ -53,8 +53,12 @@ static DEFINE_MUTEX(pci_scan_mutex);

void __devinit register_pci_controller(struct pci_channel *hose)
{
	request_resource(&iomem_resource, hose->mem_resource);
	request_resource(&ioport_resource, hose->io_resource);
	if (request_resource(&iomem_resource, hose->mem_resource) < 0)
		goto out;
	if (request_resource(&ioport_resource, hose->io_resource) < 0) {
		release_resource(hose->mem_resource);
		goto out;
	}

	*hose_tail = hose;
	hose_tail = &hose->next;
@@ -76,6 +80,9 @@ void __devinit register_pci_controller(struct pci_channel *hose)
		pcibios_scanbus(hose);
		mutex_unlock(&pci_scan_mutex);
	}

out:
	printk(KERN_WARNING "Skipping PCI bus scan due to resource conflict\n");
}

static int __init pcibios_init(void)
@@ -319,20 +326,9 @@ void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)

	if (flags & IORESOURCE_IO)
		return ioport_map_pci(dev, start, len);

	/*
	 * Presently the IORESOURCE_MEM case is a bit special, most
	 * SH7751 style PCI controllers have PCI memory at a fixed
	 * location in the address space where no remapping is desired.
	 * With the IORESOURCE_MEM case more care has to be taken
	 * to inhibit page table mapping for legacy cores, but this is
	 * punted off to __ioremap().
	 *					-- PFM.
	 */
	if (flags & IORESOURCE_MEM) {
		if (flags & IORESOURCE_CACHEABLE)
			return ioremap(start, len);

		return ioremap_nocache(start, len);
	}