X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=drivers%2Fpci%2Fsetup-res.c;h=17bed18d24ad10eb021e7d3148f8456ff5fe2277;hb=8de53dfbf9a0a0f7538c005137059c5c021476e1;hp=7d678bb15ffb30daed8bebf18d1ef5642a30a13b;hpb=aa71fa3cd5b7b4f669cd74c5a16de57d2938cd85;p=~andy%2Flinux diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 7d678bb15ff..17bed18d24a 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -93,8 +93,7 @@ void pci_update_resource(struct pci_dev *dev, int resno) int pci_claim_resource(struct pci_dev *dev, int resource) { struct resource *res = &dev->resource[resource]; - struct resource *root; - int err; + struct resource *root, *conflict; root = pci_find_parent_resource(dev, res); if (!root) { @@ -103,12 +102,15 @@ int pci_claim_resource(struct pci_dev *dev, int resource) return -EINVAL; } - err = request_resource(root, res); - if (err) + conflict = request_resource_conflict(root, res); + if (conflict) { dev_err(&dev->dev, - "address space collision: %pR already in use\n", res); + "address space collision: %pR conflicts with %s %pR\n", + res, conflict->name, conflict); + return -EBUSY; + } - return err; + return 0; } EXPORT_SYMBOL(pci_claim_resource);