Thomas Hellström wrote:
> Jerome Glisse wrote:
>   
>> This change allow driver to pass memory space preference
>> on buffer object placement. Up to 15 differents places
>> which should be enought. The placement order is given
>> by the memory type encoded on 4bits in 64bits dword.
>> First 4bits is the number of memory placement. Next
>> 4bits is the prefered placement, then next 4bits is
>> the second prefered placement.
>>
>> In order to avoid long function prototype i used a structure
>> to path along driver wishes on the allocation. Beside
>> the 64bits dwords describing prefered placement, there
>> is flags indicating others preferences (caching attributes,
>> pinning, ...), there is also fpfn & lpfn which are the
>> first page and last page number btw which allocation can
>> happen. This allow to place a buffer in a certain range.
>> If those fields are set to 0 ttm will assume buffer can
>> be put anywhere in the address space (thus it avoids putting
>> a burden on the driver to always properly set those fields).
>>
>> This patch also factor few functions like evicting first
>> entry of lru list or getting a memory space. This avoid
>> code duplication.
>>
>> Signed-off-by: Jerome Glisse <jgli...@redhat.com>
>>   
>>     
> Jerome,
>
> I'm just reviewing the API change here. I'll do a more thorough code 
> review when the API is agreed upon.
>
>   
>> +
>> +/**
>> + * struct ttm_placement
>> + *
>> + * @fpfn:           first valid page frame number to put the object
>> + * @lpfn:           last valid page frame number to put the object
>> + * @placements:             prefered placements, 4bits per placement,
>> + * first 4 bits are the the number of placement
>> + * @busy_placements:        prefered placements when need to evict,
>> + * 4bits per placement, first 4 bits are the the number of placement
>> + * @flags:  Additional placement flags
>> + *
>> + * Structure indicating the placement you request for an object.
>> + */
>> +struct ttm_placement {
>> +    unsigned        fpfn;
>> +    unsigned        lpfn;
>> +    u64             placements;
>> +    u32             flags;
>> +};
>> +
>>   
>>     
> The names fpfn and lpfn are a bit misleading, since the pfn can be 
> confused with kernel pfns. These are really page offsets into the 
> managed area? At least this confused me a bit.
>
> For @placements and @busy_placements, I take it you encode both the 
> possible placements and the priority order (although you leave out the 
> @busy_placements in the struct. I think @busy_placements are needed, 
> though. Consider a situation where you want to place a texture in vram, 
> but if that causes a pipeline stall due to VRAM eviction, rather place 
> it in AGP.
>
> I dislike the coding of all this information in a single member, also I 
> think one should distinguish between allowable placement and priority. 
> The validation code may want to alter priority, which is not easily done 
> in current TTM, and core TTM basically only wants to be able to move 
> objects out to cached or uncached system memory.
>
> What about
>
> struct ttm_placement {
>        unsigned long fpfn;
>        unsigned long lpfn;
>        const u64 *placements;             //Encoded the traditional way
>        unsigned num_placements;
>        const u64 *busy_placements;
>        unsigned num_busy_placements;
> }
>
>
> // For core ttm use.
> static inline struct ttm_placement *ttm_encode_simple_placement(u64 
> desired, struct ttm_placement *placement)
> {
>         placement->fpfn = placement->lpfn = 0;
>         placement->placements = placement->busy_placements = &desired;
>         placement->num_placements = placement->num_busy_placements = 1;
> }
>
>
>   
Actually, on second thought this isn't particularly nice either.
What I'm after is

a) being able to specify both memory region and caching policy, for 
example write-combined VRAM | cached AGP.
b) avoid encoding the stuff in a single member.

/Thomas





------------------------------------------------------------------------------
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing. 
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to