[PATCH 06/13] drm/ttm: flip over the range manager to self allocated nodes

Christian König ckoenig.leichtzumerken at gmail.com
Sun May 30 16:51:47 UTC 2021


Hi Thomas,

Am 29.05.21 um 17:48 schrieb Thomas Hellström (Intel):
> Hi, Christian,
>
> On 4/30/21 11:25 AM, Christian König wrote:
>> Start with the range manager to make the resource object the base
>> class for the allocated nodes.
>>
>> While at it cleanup a lot of the code around that.
>
> Could you briefly describe the design thoughts around this. While it's 
> clear to me that we want separately allocated struct ttm_resource 
> objects, it's not clear why the visibility of those are pushed down 
> the interfaces to the range managers?

Why do you think the visibility is pushed to the range manger?

>
> In addition to the need for a separately allocated struct 
> ttm_resource, when looking at TTM-ify i915 I've come across a couple 
> of problems.
>
> 1) People have started abusing the range manager interface to attach 
> device private data to the mm_node, or probably really to the struct 
> ttm_resource. That makes it very unclear what the input needed for the 
> managers really are. For examle what members of the bo does the range 
> manager really use and why? Same for the struct ttm_resource. I think 
> in a perfect world, the interface to these range managers should be a 
> struct ttm_placement as input and as output an opaque mm node and 
> perhaps a way to convert that mm node to something useful like a range 
> or a scatter-gather table.

Well I don't see that as an abuse. The backend allocation are completely 
driver specific and the range manager is just implementing some common 
ground for drm_mm based backends.

>
> 2) But that doesn't really address the problem of drivers wanting to 
> attach device private data to a struct ttm_resource, which at some 
> point caused someone to add a bo to the manager interface. The novueau 
> driver attaches a "kind" member to the mm node that it pulls out of 
> the bo; The i915 driver would want to cache an st table and a radix 
> tree to cache index-to-pfn maps.

Driver specific backends should inherit either from the range manager 
when they want to implement a drm_mm based backend or from ttm_resource 
directly.

>
> 3) In the end we'd probably want the kmap iterator methods and the 
> various mapping funtions to be methods of the struct ttm_resource.

Yes moving the iterators into that was also my idea.

>
> So basically here
>
> 1) Would help making range managers with various functionality simple 
> to write and share.

I don't think we want that. Instead allocation backends should be driver 
specific and we should just implement some common ground helpers for 
drm_mm based backends in TTM.

> 2) Would help drivers attach private data to a struct ttm_resource 
> without abusing the manager interfaces,

I don't think that this is abusive in the first place. Drivers should 
append resource specific information by inheriting from the ttm_resource 
object.

Regards,
Christian.

> 3) Would help clean up the mapping code.
>
> But at least 2) here would probably mean that we need a driver 
> callback to allocate a struct ttm_resource rather than having the 
> managers allocate them. Drivers can then embed them in private structs 
> if needed.
>
> Or is there a way to achieve these goals or something similar with the 
> approach you are taking here?
>
> Thanks,
>
> Thomas
>
>
>



More information about the dri-devel mailing list