[PATCH] drm/ttm: enable eviction for Per-VM-BO

Christian König ckoenig.leichtzumerken at gmail.com
Fri Dec 15 09:21:36 UTC 2017


Am 15.12.2017 um 07:24 schrieb Thomas Hellstrom:
> Hi.
>
> On 12/14/2017 09:10 AM, Roger He wrote:
>> Change-Id: I0c6ece0decd18d30ccc94e5c7ca106d351941c62
>> Signed-off-by: Roger He <Hongbo.He at amd.com>
>> ---
>>   drivers/gpu/drm/ttm/ttm_bo.c | 11 +++++------
>>   1 file changed, 5 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
>> index 098b22e..ba5b486 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
>> @@ -707,7 +707,6 @@ bool ttm_bo_eviction_valuable(struct 
>> ttm_buffer_object *bo,
>>   EXPORT_SYMBOL(ttm_bo_eviction_valuable);
>>     static int ttm_mem_evict_first(struct ttm_bo_device *bdev,
>> -                   struct reservation_object *resv,
>>                      uint32_t mem_type,
>>                      const struct ttm_place *place,
>>                      struct ttm_operation_ctx *ctx)
>> @@ -722,8 +721,9 @@ static int ttm_mem_evict_first(struct 
>> ttm_bo_device *bdev,
>>       spin_lock(&glob->lru_lock);
>>       for (i = 0; i < TTM_MAX_BO_PRIORITY; ++i) {
>>           list_for_each_entry(bo, &man->lru[i], lru) {
>> -            if (bo->resv == resv) {
>> -                if (list_empty(&bo->ddestroy))
>> +            if (bo->resv == ctx->resv) {
>> +                if (!ctx->allow_reserved_eviction &&
>> +                    list_empty(&bo->ddestroy))
>>                       continue;
>
> It looks to me like a value of locked==true could leak through from a 
> previous loop iteration here, so that locked ends up to be true if 
> (bo->resv == resv  && ctx->allow_reserved_eviction), even if no 
> locking was taking place. Perhaps-re-initialize locked to false on 
> each loop iteration?

Yeah, that is correct. Roger had a patch for this as prerequisite for 
this one.

No idea why this change isn't obvious in this one.

Christian.

>
> /Thomas
>
>>               } else {
>>                   locked = reservation_object_trylock(bo->resv);
>> @@ -835,7 +835,7 @@ static int ttm_bo_mem_force_space(struct 
>> ttm_buffer_object *bo,
>>               return ret;
>>           if (mem->mm_node)
>>               break;
>> -        ret = ttm_mem_evict_first(bdev, bo->resv, mem_type, place, 
>> ctx);
>> +        ret = ttm_mem_evict_first(bdev, mem_type, place, ctx);
>>           if (unlikely(ret != 0))
>>               return ret;
>>       } while (1);
>> @@ -1332,8 +1332,7 @@ static int ttm_bo_force_list_clean(struct 
>> ttm_bo_device *bdev,
>>       for (i = 0; i < TTM_MAX_BO_PRIORITY; ++i) {
>>           while (!list_empty(&man->lru[i])) {
>>               spin_unlock(&glob->lru_lock);
>> -            ret = ttm_mem_evict_first(bdev, NULL, mem_type,
>> -                          NULL, &ctx);
>> +            ret = ttm_mem_evict_first(bdev, mem_type, NULL, &ctx);
>>               if (ret)
>>                   return ret;
>>               spin_lock(&glob->lru_lock);
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel



More information about the dri-devel mailing list