On 05/22/2011 11:59 AM, Gleb Natapov wrote:
> There is no problem. If the PCI bus priority is higher than RAM
> priority, then PCI BARs will override RAM.
>
So if memory region has no subregion that covers part of the region
lower prio region is used? Now the same with the pictures:
-- root
-- PCI 0x00000 - 0x2ffff (prio 0)
-- BAR A 0x1000 - 0x1fff
-- BAR B 0x20000 - 0x20fff
-- RAM 0x00000 - 0x1ffff (prio 1)
In the tree above at address 0x0 PCI has higher priority,
In a previous mail, I asserted that 1 > 0. Under this assumption, PCI
has lower priority.
but since
there is no subregion at this range next prio region is used instead
(RAM). Is this correct?
Assuming pci prio = 1 and ram prio = 0, yes.
If yes how core knows that container is
transparent like that (RAM container is not)?
All containers are transparent. Only RAM and MMIO regions are not.
> >> Which one takes precedence is determined by the priorities of the
> >> RAM subregion vs. the PCI bus subregion.
> >>
> >Yes, and that is why PCI subsystem or platform code can't directly uses
> >memory API to register PCI memory region/RAM memory region respectively,
> >because they wouldn't know what priorities to specify. Only chipset code
> >knows, so the RAM/PCI memory registration should go through chipset
> >code,
>
> Correct. Chipset code creates RAM and PCI regions, and gives the
> PCI region to the PCI bus. Devices give BAR subregions to the PCI
> bus. The PCI bus does the registration.
OK. What happens if device tries to create subregion outside of PCI
region provided by chipset to PCI bus?
What does real hardware do?
The region API has an offset and size, and clips anything outside that.
However PCI may be more complicated due to 64-bit BARs, we may need an
extra API to control clipping.
>
> > but even chipset code doesn't know everything. It knows nothing
> >about cpu local memory regions for instance, so all registrations should
> >go through system bus in the end. Is this how API suppose to be used?
>
> Yes. Every point where a decision is made on how to route memory
> accesses is a modelled as a container node.
>
Excellent. I would argue that this is exactly the point where an
overlapping can be resolved too :)
It is.
--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.