From b3e69f1c0a577723197065d06da494ef4aa2b2a2 Mon Sep 17 00:00:00 2001 From: Pixel Ding Date: Wed, 8 Nov 2017 11:03:14 +0800 Subject: [PATCH 3469/4131] drm/amdgpu: revise retry init to fully cleanup driver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Retry at drm_dev_register instead of amdgpu_device_init. Reviewed-by: Christian König Signed-off-by: Pixel Ding Signed-off-by: Alex Deucher Signed-off-by: Kalyan Alle --- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 +++ drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 15 ++------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 8051a1b..1b15828 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -1985,6 +1985,9 @@ int amdgpu_device_init(struct amdgpu_device *adev, amdgpu_virt_mmio_blocked(adev) && !amdgpu_virt_wait_reset(adev)) { dev_err(adev->dev, "VF exclusive mode timeout\n"); + /* Don't send request since VF is inactive. */ + adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME; + adev->virt.ops = NULL; r = -EAGAIN; goto failed; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index 6d5062e..511a22f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -84,7 +84,7 @@ void amdgpu_driver_unload_kms(struct drm_device *dev) int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) { struct amdgpu_device *adev; - int r, acpi_status, retry = 0; + int r, acpi_status; #ifdef CONFIG_DRM_AMDGPU_SI if (!amdgpu_si_support) { @@ -117,7 +117,6 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) } } #endif -retry_init: adev = kzalloc(sizeof(struct amdgpu_device), GFP_KERNEL); if (adev == NULL) { @@ -140,17 +139,7 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) * VRAM allocation */ r = amdgpu_device_init(adev, dev, dev->pdev, flags); - if (r == -EAGAIN && ++retry <= 3) { - adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME; - adev->virt.ops = NULL; - amdgpu_device_fini(adev); - kfree(adev); - dev->dev_private = NULL; - /* Don't request EX mode too frequently which is attacking */ - msleep(5000); - dev_err(&dev->pdev->dev, "retry init %d\n", retry); - goto retry_init; - } else if (r) { + if (r) { dev_err(&dev->pdev->dev, "Fatal error during GPU init\n"); goto out; } -- 2.7.4