Make pci_claim_resource() use request_resource() rather than insert_resource()
This function has traditionally used "insert_resource()", because before commitcebd78a8c5
("Fix pci_claim_resource") it used to just insert the resource into whatever root resource tree that was indicated by "pcibios_select_root()". So there Matthew fixed it to actually look up the proper parent resource, which means that now it's actively wrong to then traverse the resource tree any more: we already know exactly where the new resource should go. And when we then did commita76117dfd6
("x86: Use pci_claim_resource"), which changed the x86 PCI code from the open-coded pr = pci_find_parent_resource(dev, r); if (!pr || request_resource(pr, r) < 0) { to using if (pci_claim_resource(dev, idx) < 0) { that "insert_resource()" now suddenly became a problem, and causes a regression covered by http://bugzilla.kernel.org/show_bug.cgi?id=13891 which this fixes. Reported-and-tested-by: Rafael J. Wysocki <rjw@sisk.pl> Cc: Matthew Wilcox <willy@linux.intel.com> Cc: Andrew Patterson <andrew.patterson@hp.com> Cc: Linux PCI <linux-pci@vger.kernel.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
0dd8486b5c
commit
79896cf42f
1 changed files with 2 additions and 2 deletions
|
@ -100,16 +100,16 @@ int pci_claim_resource(struct pci_dev *dev, int resource)
|
|||
{
|
||||
struct resource *res = &dev->resource[resource];
|
||||
struct resource *root;
|
||||
char *dtype = resource < PCI_BRIDGE_RESOURCES ? "device" : "bridge";
|
||||
int err;
|
||||
|
||||
root = pci_find_parent_resource(dev, res);
|
||||
|
||||
err = -EINVAL;
|
||||
if (root != NULL)
|
||||
err = insert_resource(root, res);
|
||||
err = request_resource(root, res);
|
||||
|
||||
if (err) {
|
||||
const char *dtype = resource < PCI_BRIDGE_RESOURCES ? "device" : "bridge";
|
||||
dev_err(&dev->dev, "BAR %d: %s of %s %pR\n",
|
||||
resource,
|
||||
root ? "address space collision on" :
|
||||
|
|
Reference in a new issue