mirror of https://gitee.com/openkylin/linux.git
PCI: fix pbus_size_mem() resource alignment for CardBus controllers
Commit884525655d
("PCI: clean up resource alignment management") changed the resource handling to mark how a resource was aligned on a per-resource basis. Thus, instead of looking at the resource number to determine whether it was a bridge resource or a regular resource (they have different alignment rules), we should just ask the resource for its alignment directly. The reason this broke only cardbus resources was that for the other types of resources, the old way of deciding alignment actually still happened to work. But CardBus bridge resources had been changed by commit934b7024f0
("Fix cardbus resource allocation") to look more like regular resources than PCI bridge resources from an alignment handling standpoint. Reported-and-tested-by: Andrew Morton <akpm@linux-foundation.org> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
de014d6176
commit
5f17cfce57
|
@ -352,11 +352,12 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask, unsigned long
|
|||
continue;
|
||||
r_size = r->end - r->start + 1;
|
||||
/* For bridges size != alignment */
|
||||
align = (i < PCI_BRIDGE_RESOURCES) ? r_size : r->start;
|
||||
align = resource_alignment(r);
|
||||
order = __ffs(align) - 20;
|
||||
if (order > 11) {
|
||||
dev_warn(&dev->dev, "BAR %d too large: "
|
||||
dev_warn(&dev->dev, "BAR %d bad alignment %llx: "
|
||||
"%#016llx-%#016llx\n", i,
|
||||
(unsigned long long)align,
|
||||
(unsigned long long)r->start,
|
||||
(unsigned long long)r->end);
|
||||
r->flags = 0;
|
||||
|
|
Loading…
Reference in New Issue