Messages in this thread | | | Date | Thu, 20 Dec 2007 15:15:00 -0500 | From | Tony Camuso <> | Subject | Re: [Fwd: Re: [PATCH 0/5]PCI: x86 MMCONFIG] |
| |
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.
| |