[PATCH v5 4/6] drm/amdgpu: alloc and init vm::task_info from first submit

Pierre-Eric Pelloux-Prayer pierre-eric at damsy.net
Wed Oct 9 07:52:52 UTC 2024


Le 08/10/2024 à 10:13, Christian König a écrit :
> Am 03.10.24 um 14:43 schrieb Pierre-Eric Pelloux-Prayer:
>> This will allow to use flexible array to store the process name and
>> other information.
>>
>> This also means that process name will be determined once and for all,
>> instead of at each submit.
>>
>> Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 29 ++++++++++++--------------
>>   1 file changed, 13 insertions(+), 16 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> index e20d19ae01b2..6cd5bd5362d4 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> @@ -2331,7 +2331,7 @@ amdgpu_vm_get_task_info_vm(struct amdgpu_vm *vm)
>>   {
>>       struct amdgpu_task_info *ti = NULL;
>> -    if (vm) {
>> +    if (vm && vm->task_info) {
>>           ti = vm->task_info;
>>           kref_get(&vm->task_info->refcount);
>>       }
>> @@ -2361,6 +2361,10 @@ static int amdgpu_vm_create_task_info(struct amdgpu_vm *vm)
>>       if (!vm->task_info)
>>           return -ENOMEM;
>> +    /* Set process attributes now. */
>> +    vm->task_info->tgid = current->group_leader->pid;
>> +    get_task_comm(vm->task_info->process_name, current->group_leader);
>> +
>>       kref_init(&vm->task_info->refcount);
>>       return 0;
>>   }
>> @@ -2372,20 +2376,16 @@ static int amdgpu_vm_create_task_info(struct amdgpu_vm *vm)
>>    */
>>   void amdgpu_vm_set_task_info(struct amdgpu_vm *vm)
>>   {
>> -    if (!vm->task_info)
>> -        return;
>> -
>> -    if (vm->task_info->pid == current->pid)
>> +    if (!vm->task_info) {
>> +        if (amdgpu_vm_create_task_info(vm))
>> +            return;
>> +    } else if (vm->task_info->pid == current->pid) {
>>           return;
>> +    }
>> +    /* Update task attributes. */
>>       vm->task_info->pid = current->pid;
>>       get_task_comm(vm->task_info->task_name, current);
>> -
>> -    if (current->group_leader->mm != current->mm)
>> -        return;
>> -
>> -    vm->task_info->tgid = current->group_leader->pid;
>> -    get_task_comm(vm->task_info->process_name, current->group_leader);
>>   }
>>   /**
>> @@ -2482,10 +2482,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
>>       if (r)
>>           goto error_free_root;
>> -    r = amdgpu_vm_create_task_info(vm);
>> -    if (r)
>> -        DRM_DEBUG("Failed to create task info for VM\n");
>> -
>>       amdgpu_bo_unreserve(vm->root.bo);
>>       amdgpu_bo_unref(&root_bo);
>> @@ -2608,7 +2604,8 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>>       root = amdgpu_bo_ref(vm->root.bo);
>>       amdgpu_bo_reserve(root, true);
>> -    amdgpu_vm_put_task_info(vm->task_info);
>> +    if (vm->task_info)
>> +        amdgpu_vm_put_task_info(vm->task_info);
> 
> That NULL check should probably be moved into amdgpu_vm_put_task_info().
> 
> Apart from that the patch is Reviewed-by: Christian König <christian.koenig at amd.com>.

Fixed in attached patch.

Pierre-Eric

> 
> Regards,
> Christian.
> 
>>       amdgpu_vm_set_pasid(adev, vm, 0);
>>       dma_fence_wait(vm->last_unlocked, false);
>>       dma_fence_put(vm->last_unlocked);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0004-drm-amdgpu-alloc-and-init-vm-task_info-from-first-su.patch
Type: text/x-patch
Size: 2890 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20241009/d396dfe3/attachment.bin>


More information about the amd-gfx mailing list