linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] PCI: get correct bridge mmio size with old size checking
@ 2015-06-13 22:39 Yinghai Lu
  2015-06-19  2:26 ` Bjorn Helgaas
  0 siblings, 1 reply; 6+ messages in thread
From: Yinghai Lu @ 2015-06-13 22:39 UTC (permalink / raw)
  To: Bjorn Helgaas; +Cc: linux-pci, Yinghai Lu

Found allocation request too big size for must+optional during pci
bus rescan via /sys/bus/pci/rescan, and fail with that size.

[ 1217.699800] pci 0000:85:02.0: bridge window [mem 0x00100000-0x001fffff] to [bus 86] add_size 100000 add_align 100000
[ 1217.699821] pci 0000:85:03.0: bridge window [mem 0x00100000-0x001fffff] to [bus 87] add_size 100000 add_align 100000
[ 1217.699907] pci 0000:85:02.0: res[14]=[mem 0x00100000-0x001fffff] res_to_dev_res add_size 100000 min_align 100000
[ 1217.699909] pci 0000:85:03.0: res[14]=[mem 0x00100000-0x001fffff] res_to_dev_res add_size 100000 min_align 100000
[ 1217.699933] pci 0000:85:02.0: BAR 14: assigned [mem 0xedf00000-0xee0fffff]
[ 1217.699936] pci 0000:85:03.0: BAR 14: no space for [mem size 0x00200000]
[ 1217.699939] pci 0000:85:03.0: BAR 14: failed to assign [mem size 0x00200000]

After close look, for 85:02.0 only need 1M for must+optional.

It turns out that there is bug in calculate_memsize() with checking.
We should compare size sum with old size at last instead of partial size.

Actually we have that correct in calculate_iosize(), with this patch
we have mmio and io port size calculation consistent.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 drivers/pci/setup-bus.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: linux-2.6/drivers/pci/setup-bus.c
===================================================================
--- linux-2.6.orig/drivers/pci/setup-bus.c
+++ linux-2.6/drivers/pci/setup-bus.c
@@ -857,9 +857,10 @@ static resource_size_t calculate_memsize
 		size = min_size;
 	if (old_size == 1)
 		old_size = 0;
+	size = ALIGN(size + size1, align);
 	if (size < old_size)
 		size = old_size;
-	size = ALIGN(size + size1, align);
+
 	return size;
 }
 

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-06-24 23:54 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-13 22:39 [PATCH] PCI: get correct bridge mmio size with old size checking Yinghai Lu
2015-06-19  2:26 ` Bjorn Helgaas
2015-06-19  3:02   ` Yinghai Lu
2015-06-19  3:26     ` Bjorn Helgaas
2015-06-24 22:28     ` Bjorn Helgaas
2015-06-24 23:54       ` Yinghai Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).