In case that one device's alignment is greater than its size,
we may get an incorrect size and alignment for its bus's memory
window in pbus_size_mem(). This patch fixes this case.

Signed-off-by: Yongji Xie <xyj...@linux.vnet.ibm.com>
---
 drivers/pci/setup-bus.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index f30ca75..b3cabc2 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -1075,10 +1075,10 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned 
long mask,
                                r->flags = 0;
                                continue;
                        }
-                       size += r_size;
+                       size += max(r_size, align);
                        /* Exclude ranges with size > align from
                           calculation of the alignment. */
-                       if (r_size == align)
+                       if (r_size <= align)
                                aligns[order] += align;
                        if (order > max_order)
                                max_order = order;
-- 
1.7.1

Reply via email to