From: Du Changbin <changbin...@gmail.com>

Currently, the pci_size() function actually return 'size-1'.
Make it return real size to avoid confusing.

Signed-off-by: Du Changbin <changbin...@gmail.com>
---
 drivers/pci/probe.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 201f9e5ff55c..8ff2b1413865 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -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, &region);
        pcibios_resource_to_bus(dev->bus, &inverted_region, res);
-- 
2.17.1

Reply via email to