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 >>