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

Ding, Pixel Pixel.Ding at amd.com
Tue Oct 31 07:06:24 UTC 2017


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