[PATCH] drm/amdgpu: release exclusive mode after hw_init if no kfd

Oded Gabbay oded.gabbay at gmail.com
Tue Oct 31 10:25:27 UTC 2017


I would pass only pdev to kgd2kfd_probe, instead of adev.
Then, I would initialize adev inside kgd2kfd_device_init
That way, you can call kgd2kfd_probe before device_init of amdgpu and
you can know if amdkfd is supposed to handle this device.
Does that make sense ?

On Mon, Oct 30, 2017 at 11:13 AM, Ding, Pixel <Pixel.Ding at amd.com> wrote:
> Another option is adding a function with the same logics as top half probe to determine if KFD is enabled or not, like amdgpu_amdkfd_enabled().
>
> I think it’s okay to pass pdev separately. The KFD probe implementation also has pdev parameter, it doesn’t retrieve that from adev, while the middle layer does this.
>
> Which one do you prefer?
>
>> Sincerely Yours,
> Pixel
>
>
>
>
>
>
>
> On 30/10/2017, 4:52 PM, "Oded Gabbay" <oded.gabbay at gmail.com> wrote:
>
>>Except from pdev, kfd doesn't access any other fields in adev, so
>>passing pdev as a different parameter seems fine.
>>The problem with that approach is we need to remember for the future
>>not to access other adev fields, and that seems risky and not correct
>>
>>
>>
>>
>>On Mon, Oct 30, 2017 at 10:30 AM, Ding, Pixel <Pixel.Ding at amd.com> wrote:
>>> Get your point. I don’t know why the test is passed however will revise later.
>>>
>>> I definitely want the know if KFD is enabled before device init. Any suggestion? Or do you mind if the pdev is passed to probe in other way?
>>>
>>>>>> Sincerely Yours,
>>> Pixel
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On 30/10/2017, 4:20 PM, "Oded Gabbay" <oded.gabbay at gmail.com> wrote:
>>>
>>>>On Mon, Oct 30, 2017 at 9:57 AM, Pixel Ding <Pixel.Ding at amd.com> wrote:
>>>>> From: pding <Pixel.Ding at amd.com>
>>>>>
>>>>> Move kfd probe prior to device init. Release exclusive mode
>>>>> after hw_init if kfd is not enabled.
>>>>>
>>>>> Signed-off-by: pding <Pixel.Ding at amd.com>
>>>>> ---
>>>>>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 +++
>>>>>  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    | 5 +++--
>>>>>  2 files changed, 6 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>> index 400dfaa..e46ec51 100644
>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>> @@ -1716,6 +1716,9 @@ static int amdgpu_init(struct amdgpu_device *adev)
>>>>>                 adev->ip_blocks[i].status.hw = true;
>>>>>         }
>>>>>
>>>>> +       if (amdgpu_sriov_vf(adev) && !adev->kfd)
>>>>> +               amdgpu_virt_release_full_gpu(adev, true);
>>>>> +
>>>>>         return 0;
>>>>>  }
>>>>>
>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>>>> index 3e9760d..e91907c 100644
>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>>>> @@ -138,6 +138,8 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
>>>>>             !pci_is_thunderbolt_attached(dev->pdev))
>>>>>                 flags |= AMD_IS_PX;
>>>>>
>>>>> +       amdgpu_amdkfd_device_probe(adev);
>>>>> +
>>>>>         /* amdgpu_device_init should report only fatal error
>>>>>          * like memory allocation failure or iomapping failure,
>>>>>          * or memory manager initialization failure, it must
>>>>> @@ -170,7 +172,6 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
>>>>>                                 "Error during ACPI methods call\n");
>>>>>         }
>>>>>
>>>>> -       amdgpu_amdkfd_device_probe(adev);
>>>>>         amdgpu_amdkfd_device_init(adev);
>>>>>
>>>>>         if (amdgpu_device_is_px(dev)) {
>>>>> @@ -182,7 +183,7 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
>>>>>                 pm_runtime_put_autosuspend(dev->dev);
>>>>>         }
>>>>>
>>>>> -       if (amdgpu_sriov_vf(adev))
>>>>> +       if (amdgpu_sriov_vf(adev) && adev->kfd)
>>>>>                 amdgpu_virt_release_full_gpu(adev, true);
>>>>>
>>>>>  out:
>>>>> --
>>>>> 2.9.5
>>>>>
>>>>> _______________________________________________
>>>>> amd-gfx mailing list
>>>>> amd-gfx at lists.freedesktop.org
>>>>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>>>>
>>>>The amdkfd probe function uses the pdev field inside adev. That field
>>>>is initialized in device init, so you can't call amdkfd probe before
>>>>that function.
>>>>Oded


More information about the amd-gfx mailing list