[PATCH] drm/amdgpu: Add show_fdinfo() interface

Felix Kuehling felix.kuehling at amd.com
Tue Apr 6 15:58:28 UTC 2021


Am 2021-04-06 um 7:13 a.m. schrieb Christian König:
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>>> @@ -1042,13 +1042,15 @@ int
>>> amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, u32 pasid,
>>>                         struct dma_fence **ef)
>>>   {
>>>       struct amdgpu_device *adev = get_amdgpu_device(kgd);
>>> +    struct amdgpu_fpriv *fpriv;
>>>       struct amdgpu_vm *new_vm;
>>>       int ret;
>>>   -    new_vm = kzalloc(sizeof(*new_vm), GFP_KERNEL);
>>> -    if (!new_vm)
>>> +    fpriv = kzalloc(sizeof(*fpriv), GFP_KERNEL);
>>> +    if (!fpriv)
>>>           return -ENOMEM;
>>>   +    new_vm = &fpriv->vm;
>>>       /* Initialize AMDGPU part of the VM */
>>>       ret = amdgpu_vm_init(adev, new_vm, AMDGPU_VM_CONTEXT_COMPUTE,
>>> pasid);
>>>       if (ret) {
>>> @@ -1063,12 +1065,14 @@ int
>>> amdgpu_amdkfd_gpuvm_create_process_vm(struct kgd_dev *kgd, u32 pasid,
>>>         *vm = (void *) new_vm;
>>>   +    amdgpu_fdinfo_init(adev, fpriv, pasid);
>>> +
>>>       return 0;
>>>     init_kfd_vm_fail:
>>>       amdgpu_vm_fini(adev, new_vm);
>>>   amdgpu_vm_init_fail:
>>> -    kfree(new_vm);
>>> +    kfree(fpriv);
>>>       return ret;
>>>   }
>>>   @@ -1142,6 +1146,8 @@ void
>>> amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm)
>>>   {
>>>       struct amdgpu_device *adev = get_amdgpu_device(kgd);
>>>       struct amdgpu_vm *avm = (struct amdgpu_vm *)vm;
>>> +    struct amdgpu_fpriv *fpriv =
>>> +        container_of(avm, struct amdgpu_fpriv, vm);
>>>         if (WARN_ON(!kgd || !vm))
>>>           return;
>>> @@ -1149,8 +1155,9 @@ void
>>> amdgpu_amdkfd_gpuvm_destroy_process_vm(struct kgd_dev *kgd, void *vm)
>>>       pr_debug("Destroying process vm %p\n", vm);
>>>         /* Release the VM context */
>>> +    amdgpu_fdinfo_fini(adev, fpriv);
>>>       amdgpu_vm_fini(adev, avm);
>>> -    kfree(vm);
>>> +    kfree(fpriv);
>
> Felix needs to take a look here, but that is most likely a no-go. On
> the other hand if you drop the amdgpu_proc structure that should
> become unnecessary.

This is legacy code to support really old versions of ROCm user mode
that didn't call kfd_ioctl_acquire_vm to grab the VM from a DRM device
file descriptor. This predates upstreaming of dGPU support in KFD. We
can probably get rid of amdgpu_amdkfd_gpuvm_(create/destroy)_process_vm
and the associated code paths in KFD now.

On any ROCm less than 3 years old we should be going through
amdgpu_amdkfd_gpuvm_(acquire/release)_process_vm.

Regards,
  Felix




More information about the amd-gfx mailing list