mirror of https://gitee.com/openkylin/linux.git
PCI: Make pci_size() return real BAR size
Currently, the pci_size() function actually returns 'size-1'. Make it return real size to avoid confusion. Signed-off-by: Du Changbin <changbin.du@gmail.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
51c48b3101
commit
01b37f851c
|
@ -121,13 +121,13 @@ static u64 pci_size(u64 base, u64 maxbase, u64 mask)
|
|||
* Get the lowest of them to find the decode size, and from that
|
||||
* the extent.
|
||||
*/
|
||||
size = (size & ~(size-1)) - 1;
|
||||
size = size & ~(size-1);
|
||||
|
||||
/*
|
||||
* base == maxbase can be valid only if the BAR has already been
|
||||
* programmed with all 1s.
|
||||
*/
|
||||
if (base == maxbase && ((base | size) & mask) != mask)
|
||||
if (base == maxbase && ((base | (size - 1)) & mask) != mask)
|
||||
return 0;
|
||||
|
||||
return size;
|
||||
|
@ -278,7 +278,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
|
|||
/* Above 32-bit boundary; try to reallocate */
|
||||
res->flags |= IORESOURCE_UNSET;
|
||||
res->start = 0;
|
||||
res->end = sz64;
|
||||
res->end = sz64 - 1;
|
||||
pci_info(dev, "reg 0x%x: can't handle BAR above 4GB (bus address %#010llx)\n",
|
||||
pos, (unsigned long long)l64);
|
||||
goto out;
|
||||
|
@ -286,7 +286,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
|
|||
}
|
||||
|
||||
region.start = l64;
|
||||
region.end = l64 + sz64;
|
||||
region.end = l64 + sz64 - 1;
|
||||
|
||||
pcibios_bus_to_resource(dev->bus, res, ®ion);
|
||||
pcibios_resource_to_bus(dev->bus, &inverted_region, res);
|
||||
|
|
Loading…
Reference in New Issue