[PATCH 6/6] drm/amdgpu: use the new drm_exec object for CS v2

Christian König ckoenig.leichtzumerken at gmail.com
Thu Jun 29 13:58:10 UTC 2023



Am 29.06.23 um 10:20 schrieb Tatsuyuki Ishi:
> On 6/28/23 19:44, Christian König wrote:
>> @@ -958,18 +904,57 @@ static int amdgpu_cs_parser_bos(struct 
>> amdgpu_cs_parser *p,
>>           e->user_invalidated = userpage_invalidated;
>>       }
>>   -    r = ttm_eu_reserve_buffers(&p->ticket, &p->validated, true,
>> -                   &duplicates);
>> -    if (unlikely(r != 0)) {
>> -        if (r != -ERESTARTSYS)
>> -            DRM_ERROR("ttm_eu_reserve_buffers failed.\n");
>> -        goto out_free_user_pages;
>> +    drm_exec_until_all_locked(&p->exec) {
>> +        r = amdgpu_vm_lock_pd(&fpriv->vm, &p->exec, 1 + p->gang_size);
>> +        drm_exec_retry_on_contention(&p->exec);
>> +        if (unlikely(r))
>> +            goto out_free_user_pages;
>> +
>> +        amdgpu_bo_list_for_each_entry(e, p->bo_list) {
>> +            /* One fence for TTM and one for each CS job */
>> +            r = drm_exec_prepare_obj(&p->exec, &e->bo->tbo.base,
>> +                         1 + p->gang_size);
>> +            drm_exec_retry_on_contention(&p->exec);
>> +            if (unlikely(r))
>> +                goto out_free_user_pages;
>> +
>> +            e->bo_va = amdgpu_vm_bo_find(vm, e->bo);
>> +            e->range = NULL;
> Still leaking.

Scratching my head, I though I fixed this.

Thanks for pointing this out,
Christian.

>> +        }
>> +
>> +        if (p->uf_bo) {
>> +            r = drm_exec_prepare_obj(&p->exec, &p->uf_bo->tbo.base,
>> +                         1 + p->gang_size);
>> +            drm_exec_retry_on_contention(&p->exec);
>> +            if (unlikely(r))
>> +                goto out_free_user_pages;
>> +        }
>>       }
>



More information about the amd-gfx mailing list