PCI: Fix calculation of bridge window's size and alignment

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().  Fix this case.

Signed-off-by: Yongji Xie <elohimes@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
Yongji Xie 2017-04-10 19:58:11 +08:00 коммит произвёл Bjorn Helgaas
Родитель ea629d873f
Коммит c9c75143a5
1 изменённых файлов: 2 добавлений и 2 удалений

Просмотреть файл

@ -1066,10 +1066,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;