On 2011-05-20 17:33, Anthony Liguori wrote:
> On 05/20/2011 04:01 AM, Avi Kivity wrote:
>> On 05/19/2011 07:32 PM, Anthony Liguori wrote:
>>>> Think of how a window manager folds windows with priorities onto a flat
>>>> framebuffer.
>>>>
>>>> You do a depth-first walk of the tree. For each child list, you iterate
>>>> it from the lowest to highest priority, allowing later subregions
>>>> override earlier subregions.
>>>>
>>>
>>>
>>> Okay, but this doesn't explain how you'll let RAM override the VGA
>>> mapping since RAM is not represented in the same child list as VGA
>>> (RAM is a child of the PMC whereas VGA is a child of ISA/PCI, both of
>>> which are at least one level removed from the PMC).
>>
>> VGA will override RAM.
>>
>> Memory controller
>> |
>> +-- RAM container (prio 0)
>> |
>> +-- PCI container (prio 1)
>> |
>> +--- vga window
> 
> Unless the RAM controller increases it's priority, right?  That's how 
> you would implement SMM, by doing priority++?
> 
> But if you have:
> 
> Memory controller
> |
> +-- RAM container (prio 0)
> |
> +-- PCI container (prio 1)
> |
> +-- PCI-X container (prio 2)
> |
> +--- vga window
> 
> Now you need to do priority = 3?
> 
> Jan had mentioned previously about registering a new temporary window. 
> I assume the registration always gets highest_priority++, or do you have 
> to explicitly specify that PCI container gets priority=1?

The latter.

And I really prefer to have this explicit over deriving the priority
from the registration order. That's way too fragile/unhandy. If you
decide to replace a region of lower priority later on, you need to
reregister everything at that level.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

Reply via email to