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

Oded Gabbay oded.gabbay at gmail.com
Tue Oct 31 10:26:06 UTC 2017


I sent you an answer in the other email thread

On Tue, Oct 31, 2017 at 9:06 AM, Ding, Pixel <Pixel.Ding at amd.com> wrote:
> Hi Oded,
>
> Would you please help reviewing the V2 patch?
>
>> Sincerely Yours,
> Pixel
>
>
>
>
>
>
>
>
> On 31/10/2017, 9:47 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.
>>
>>v2:
>> - pass pdev param
>>
>>Signed-off-by: pding <Pixel.Ding at amd.com>
>>---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 5 +++--
>> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 3 ++-
>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 +++
>> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    | 5 +++--
>> 4 files changed, 11 insertions(+), 5 deletions(-)
>>
>>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>>index c70cda0..f0f5d0e 100644
>>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
>>@@ -68,7 +68,8 @@ void amdgpu_amdkfd_fini(void)
>>       }
>> }
>>
>>-void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
>>+void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev,
>>+                              struct pci_dev *pdev)
>> {
>>       const struct kfd2kgd_calls *kfd2kgd;
>>
>>@@ -90,7 +91,7 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
>>       }
>>
>>       adev->kfd = kgd2kfd->probe((struct kgd_dev *)adev,
>>-                                 adev->pdev, kfd2kgd);
>>+                                 pdev, kfd2kgd);
>> }
>>
>> void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
>>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
>>index 8d689ab..707c892 100644
>>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
>>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
>>@@ -44,7 +44,8 @@ void amdgpu_amdkfd_suspend(struct amdgpu_device *adev);
>> int amdgpu_amdkfd_resume(struct amdgpu_device *adev);
>> void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev,
>>                       const void *ih_ring_entry);
>>-void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev);
>>+void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev,
>>+                              struct pci_dev *pdev);
>> void amdgpu_amdkfd_device_init(struct amdgpu_device *adev);
>> void amdgpu_amdkfd_device_fini(struct amdgpu_device *adev);
>>
>>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>index 2ff2c54..daa2098 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..f872052 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, dev->pdev);
>>+
>>       /* 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
>>


More information about the amd-gfx mailing list