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 >