* [PATCH] pci: overwite pci bridge res regs to get big range
@ 2009-09-13 22:57 Yinghai Lu
2009-09-17 16:36 ` Jesse Barnes
2009-10-06 16:47 ` Jesse Barnes
0 siblings, 2 replies; 3+ messages in thread
From: Yinghai Lu @ 2009-09-13 22:57 UTC (permalink / raw)
To: Jesse Barnes, Ingo Molnar, Linus Torvalds, Ivan Kokshaysky,
Matthew Wilcox
Cc: linux-kernel@vger.kernel.org
found one system:
[ 71.120590] pci 0000:40:05.0: scanning behind bridge, config 4f4a40, pass 0
[ 71.138283] PCI: Scanning bus 0000:4a
[ 71.140341] pci 0000:4a:00.0: found [15b3:6278] class 000c06 header type 00
[ 71.157173] pci 0000:4a:00.0: reg 10 64bit mmio: [0x000000-0x0fffff]
[ 71.161697] pci 0000:4a:00.0: reg 18 64bit mmio pref: [0x000000-0x7fffff]
[ 71.179403] pci 0000:4a:00.0: reg 20 64bit mmio pref: [0x000000-0xfffffff]
[ 71.185366] pci 0000:4a:00.0: calling quirk_resource_alignment+0x0/0x1dd
[ 71.200846] pci 0000:4a:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force'
[ 71.219623] PCI: Fixups for bus 0000:4a
[ 71.222194] pci 0000:40:05.0: bridge 32bit mmio: [0xcf000000-0xcf0fffff]
[ 71.238662] pci 0000:40:05.0: bridge 64bit mmio pref: [0xcd800000-0xcdffffff]
[ 71.255793] PCI: Bus scan for 0000:4a returning with max=4a
device need big pref mmio, but BIOS doesn't allocate mmio to it, but the bridge
already have small mmio range programmed.
later kernel will not allocate resource to that to the device
[ 99.574030] pci 0000:4a:00.0: BAR 4: can't allocate mem resource [0xd0000000-0xcdffffff]
[ 99.580102] pci 0000:4a:00.0: BAR 2: got res [0xcd800000-0xcdffffff] bus [0xcd800000-0xcdffffff] flags 0x12120c
[ 99.602307] pci 0000:4a:00.0: BAR 2: moved to bus [0xcd800000-0xcdffffff] flags 0x12120c
[ 99.615991] pci 0000:4a:00.0: BAR 0: got res [0xcf000000-0xcf0fffff] bus [0xcf000000-0xcf0fffff] flags 0x120204
[ 99.634499] pci 0000:4a:00.0: BAR 0: moved to bus [0xcf000000-0xcf0fffff] flags 0x120204
[ 99.654318] pci 0000:40:05.0: PCI bridge, secondary bus 0000:4a
[ 99.658766] pci 0000:40:05.0: IO window: disabled
[ 99.675478] pci 0000:40:05.0: MEM window: 0xcf000000-0xcf0fffff
[ 99.681663] pci 0000:40:05.0: PREFETCH window: 0x000000cd800000-0x000000cdffffff
so try to get big range in pci bridge if there is no child use that range.
with te patch will get
[ 99.104525] pci 0000:4a:00.0: BAR 4: got res [0xfc080000000-0xfc08fffffff] bus [0xfc080000000-0xfc08fffffff] flags 0x12120c
[ 99.123624] pci 0000:4a:00.0: BAR 4: moved to bus [0xfc080000000-0xfc08fffffff] flags 0x12120c
[ 99.131977] pci 0000:4a:00.0: BAR 2: got res [0xfc090000000-0xfc0907fffff] bus [0xfc090000000-0xfc0907fffff] flags 0x12120c
[ 99.149788] pci 0000:4a:00.0: BAR 2: moved to bus [0xfc090000000-0xfc0907fffff] flags 0x12120c
[ 99.169248] pci 0000:4a:00.0: BAR 0: got res [0xc0200000-0xc02fffff] bus [0xc0200000-0xc02fffff] flags 0x120204
[ 99.189508] pci 0000:4a:00.0: BAR 0: moved to bus [0xc0200000-0xc02fffff] flags 0x120204
[ 99.206402] pci 0000:40:05.0: PCI bridge, secondary bus 0000:4a
[ 99.210637] pci 0000:40:05.0: IO window: disabled
[ 99.224856] pci 0000:40:05.0: MEM window: 0xc0200000-0xc03fffff
[ 99.230019] pci 0000:40:05.0: PREFETCH window: 0x000fc080000000-0x000fc097ffffff
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
drivers/pci/setup-bus.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
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
@@ -299,8 +299,17 @@ static struct resource *find_free_bus_re
r = bus->resource[i];
if (r == &ioport_resource || r == &iomem_resource)
continue;
- if (r && (r->flags & type_mask) == type && !r->parent)
- return r;
+ if (r && (r->flags & type_mask) == type) {
+ if (!r->parent)
+ return r;
+ /*
+ * if there is no child under that, we should release
+ * and use it. don't need to reset it, pbus_size_* will
+ * set it again
+ */
+ if (!r->child && !release_resource(r))
+ return r;
+ }
}
return NULL;
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] pci: overwite pci bridge res regs to get big range
2009-09-13 22:57 [PATCH] pci: overwite pci bridge res regs to get big range Yinghai Lu
@ 2009-09-17 16:36 ` Jesse Barnes
2009-10-06 16:47 ` Jesse Barnes
1 sibling, 0 replies; 3+ messages in thread
From: Jesse Barnes @ 2009-09-17 16:36 UTC (permalink / raw)
To: Yinghai Lu
Cc: Ingo Molnar, Linus Torvalds, Ivan Kokshaysky, Matthew Wilcox,
linux-kernel@vger.kernel.org
On Sun, 13 Sep 2009 15:57:10 -0700
Yinghai Lu <yinghai@kernel.org> wrote:
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
>
> ---
> drivers/pci/setup-bus.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> 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
> @@ -299,8 +299,17 @@ static struct resource *find_free_bus_re
> r = bus->resource[i];
> if (r == &ioport_resource || r == &iomem_resource)
> continue;
> - if (r && (r->flags & type_mask) == type
> && !r->parent)
> - return r;
> + if (r && (r->flags & type_mask) == type) {
> + if (!r->parent)
> + return r;
> + /*
> + * if there is no child under that, we
> should release
> + * and use it. don't need to reset it,
> pbus_size_* will
> + * set it again
> + */
> + if (!r->child && !release_resource(r))
> + return r;
> + }
> }
> return NULL;
> }
This does seem like a good way of getting some extra bus space... We
should have all the child resources of a given bus by this point so it
seems like it would be safe.
You ok with this Linus?
Thanks,
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] pci: overwite pci bridge res regs to get big range
2009-09-13 22:57 [PATCH] pci: overwite pci bridge res regs to get big range Yinghai Lu
2009-09-17 16:36 ` Jesse Barnes
@ 2009-10-06 16:47 ` Jesse Barnes
1 sibling, 0 replies; 3+ messages in thread
From: Jesse Barnes @ 2009-10-06 16:47 UTC (permalink / raw)
To: Yinghai Lu
Cc: Ingo Molnar, Linus Torvalds, Ivan Kokshaysky, Matthew Wilcox,
linux-kernel@vger.kernel.org
On Sun, 13 Sep 2009 15:57:10 -0700
Yinghai Lu <yinghai@kernel.org> wrote:
>
>
> found one system:
> [ 71.120590] pci 0000:40:05.0: scanning behind bridge, config
> 4f4a40, pass 0 [ 71.138283] PCI: Scanning bus 0000:4a
> [ 71.140341] pci 0000:4a:00.0: found [15b3:6278] class 000c06
> header type 00 [ 71.157173] pci 0000:4a:00.0: reg 10 64bit mmio:
> [0x000000-0x0fffff] [ 71.161697] pci 0000:4a:00.0: reg 18 64bit
> mmio pref: [0x000000-0x7fffff] [ 71.179403] pci 0000:4a:00.0: reg
> 20 64bit mmio pref: [0x000000-0xfffffff] [ 71.185366] pci
> 0000:4a:00.0: calling quirk_resource_alignment+0x0/0x1dd
> [ 71.200846] pci 0000:4a:00.0: disabling ASPM on pre-1.1 PCIe
> device. You can enable it with 'pcie_aspm=force' [ 71.219623] PCI:
> Fixups for bus 0000:4a [ 71.222194] pci 0000:40:05.0: bridge 32bit
> mmio: [0xcf000000-0xcf0fffff] [ 71.238662] pci 0000:40:05.0: bridge
> 64bit mmio pref: [0xcd800000-0xcdffffff] [ 71.255793] PCI: Bus scan
> for 0000:4a returning with max=4a
Applied to my for-linus branch, thanks Yinghai.
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2009-10-06 16:48 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-13 22:57 [PATCH] pci: overwite pci bridge res regs to get big range Yinghai Lu
2009-09-17 16:36 ` Jesse Barnes
2009-10-06 16:47 ` Jesse Barnes
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.