[PATCH] drm/ttm: fix adding foreign BOs to the LRU during init

zhoucm1 david1.zhou at amd.com
Sun Jan 10 19:38:39 PST 2016



On 2016年01月10日 23:10, Thomas Hellstrom wrote:
> On 01/09/2016 11:46 AM, Christian König wrote:
>> It's correct that exported buffers can't be moved to another domain or
>> swapped to disk while another device is using it.
>>
>> But for imports that's a different story:
>>> an imported object should never end up on a LRU list in TTM because
>>> TTM wouldn't know how to evict it.
>> Even currently the imported objects are actually added to the LRU. The
>> problem is just that they are not added immediately during creation,
>> but only with the first command submission.
> Hmm. The fact that they are added to LRU at all sounds weird. What
> happens when TTM tries to evict or even swap out an imported buffer?
Not only the imported buffer needs this patch, But also the buffers 
shared the reservation. E.g. amdgpu is using one shared reservation for 
all BOs of page tables. We needs add it to LRU when creating the BO, 
otherwise the BO will be lost when system suspend.

Thanks,
David Zhou
>
> /Thomas
>
>
>> Regards,
>> Christian.
>>
>> Am 09.01.2016 um 08:05 schrieb Thomas Hellstrom:
>>> Hi!
>>>
>>> I might be misunderderstanding the use-case here, but IIRC the
>>> discussion with TTM vs imported / exported buffer objects is that a
>>> buffer object needs to be marked NO_EVICT in TTM before it's exported
>>> and an imported object should never end up on a LRU list in TTM because
>>> TTM wouldn't know how to evict it.
>>>
>>> /Thomas
>>>   
>>> On 01/08/2016 02:41 PM, Christian König wrote:
>>>> From: Christian König <christian.koenig at amd.com>
>>>>
>>>> If we import a BO with an eternal reservation object we don't
>>>> reserve/unreserve it. So we never add it to the LRU causing a possible
>>>> deny of service.
>>>>
>>>> Signed-off-by: Christian König <christian.koenig at amd.com>
>>>> ---
>>>>    drivers/gpu/drm/ttm/ttm_bo.c | 8 +++++++-
>>>>    1 file changed, 7 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c
>>>> b/drivers/gpu/drm/ttm/ttm_bo.c
>>>> index 745e996..a98a5d5 100644
>>>> --- a/drivers/gpu/drm/ttm/ttm_bo.c
>>>> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
>>>> @@ -1170,9 +1170,15 @@ int ttm_bo_init(struct ttm_bo_device *bdev,
>>>>        if (likely(!ret))
>>>>            ret = ttm_bo_validate(bo, placement, interruptible, false);
>>>>    -    if (!resv)
>>>> +    if (!resv) {
>>>>            ttm_bo_unreserve(bo);
>>>>    +    } else if (!(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) {
>>>> +        spin_lock(&bo->glob->lru_lock);
>>>> +        ttm_bo_add_to_lru(bo);
>>>> +        spin_unlock(&bo->glob->lru_lock);
>>>> +    }
>>>> +
>>>>        if (unlikely(ret))
>>>>            ttm_bo_unref(&bo);
>>>>    
>>>
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel



More information about the dri-devel mailing list