Commit 22283178 authored by Gabor Juhos's avatar Gabor Juhos Committed by John Crispin

MIPS: avoid possible resource conflict in register_pci_controller

The IO and memory resources of a PCI controller
might already have a parent resource set when
they are passed to 'register_pci_controller'.

If the parent resource is set, the request_resource
call will fail due to resource conflict and the
current code will not be able to register the
PCI controller.

Use the parent resource if it is available in the
request_resource call to avoid the isssue.
Signed-off-by: default avatarGabor Juhos <juhosg@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/4910/Signed-off-by: default avatarJohn Crispin <blogic@openwrt.org>
parent 6e783865
...@@ -175,9 +175,20 @@ static DEFINE_MUTEX(pci_scan_mutex); ...@@ -175,9 +175,20 @@ static DEFINE_MUTEX(pci_scan_mutex);
void register_pci_controller(struct pci_controller *hose) void register_pci_controller(struct pci_controller *hose)
{ {
if (request_resource(&iomem_resource, hose->mem_resource) < 0) struct resource *parent;
parent = hose->mem_resource->parent;
if (!parent)
parent = &iomem_resource;
if (request_resource(parent, hose->mem_resource) < 0)
goto out; goto out;
if (request_resource(&ioport_resource, hose->io_resource) < 0) {
parent = hose->io_resource->parent;
if (!parent)
parent = &ioport_resource;
if (request_resource(parent, hose->io_resource) < 0) {
release_resource(hose->mem_resource); release_resource(hose->mem_resource);
goto out; goto out;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment