Re: [Fwd: Re: [PATCH 0/5]PCI: x86 MMCONFIG]

From: Tony Camuso
Date: Thu Dec 20 2007 - 15:15:29 EST


Matthew Wilcox wrote:

Here's how BARs work ... when you write 0xffffffff to the BAR, it
ignores all the set bits that are less than the size of the BAR. So,
assuming this is a 256MB BAR (like my G33 is), what ends up written to
this BAR is 0xf0000000. Now, because this is graphics, apparently it's
special and embedded in the chipset, even though it looks like it's a
PCI device. So it actually gets priority over MMCONFIG which is also
mapped to 0xf0000000.

For your case of a 64-bit BAR, you could write 0xffffffff to the high
32-bits first, then write to the low 32-bits, then reset the low, then
high bits, and you'd avoid the problem. But the G33 has a 32-bit BAR
with the same problem, so it won't work for that case.

BARs that are behind bridges don't have this problem (they can't decode
memory accesses that aren't forwarded to them). BARs on devices which
have memory IO disabled also don't have theis problem, but disabling
devices has its problems (as does probing BARs for active devices anyway
...).

Thanks for the detailed explanation.

> The question is how large can 32-bit BARs get. As we've seen, 256MB
> exist, and are causing pain. I can't imagine any PCI device
> manufacturer thinks they can allocate 2GB of the low space, but we could
> potentially mis-size a large BAR by not using 0xffffffff.
>

Point well taken. Graphics devices understandably consume a lot of memory
space, and are likely to consume even more in the not-too-distant future.

I'm really not clear on the purpose of your patchset. Was it all to
address this one problem?


No. My patch-set does not address this problem at all, but rather the
larger problem of having mmconfig-unfriendly devices on buses that are
out of reach of the unreachable_devices() routine and bitmap.

This problem is one I encountered during my testing and mentioned in
my preamble as not being fixable by my patch-set.


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/