[PATCH] drm/amdgpu: amdgpu_device_recover_vram always failed if only one node in shadow_list
Deng, Emily
Emily.Deng at amd.com
Tue Apr 2 04:03:55 UTC 2019
Maybe it will be better to add follow check, and change “if (r <= 0 || tmo <= 0) " to "if (r <0 || tmo <= 0)".
r = dma_fence_wait_timeout(f, false, timeout);
if (r == 0) {
r = -ETIMEDOUT;
break;
} else if (r < 0) {
break;
}
Best wishes
Emily Deng
>-----Original Message-----
>From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of wentalou
>Sent: Monday, April 1, 2019 4:59 PM
>To: amd-gfx at lists.freedesktop.org
>Cc: Lou, Wentao <Wentao.Lou at amd.com>
>Subject: [PATCH] drm/amdgpu: amdgpu_device_recover_vram always failed if
>only one node in shadow_list
>
>amdgpu_bo_restore_shadow would assign zero to r if succeeded.
>r would remain zero if there is only one node in shadow_list.
>current code would always return failure when r <= 0.
>
>Change-Id: Iae6880e7c78b71fde6a6754c69665c2e312a80a5
>Signed-off-by: Wentao Lou <Wentao.Lou at amd.com>
>---
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>index c4c61e9..5cf21a4 100644
>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>@@ -3171,6 +3171,7 @@ static int amdgpu_device_recover_vram(struct
>amdgpu_device *adev)
> struct dma_fence *fence = NULL, *next = NULL;
> struct amdgpu_bo *shadow;
> long r = 1, tmo;
>+ bool single_shadow = false;
>
> if (amdgpu_sriov_runtime(adev))
> tmo = msecs_to_jiffies(8000);
>@@ -3194,10 +3195,12 @@ static int amdgpu_device_recover_vram(struct
>amdgpu_device *adev)
> r = dma_fence_wait_timeout(fence, false, tmo);
> dma_fence_put(fence);
> fence = next;
>+ single_shadow = false;
> if (r <= 0)
> break;
> } else {
> fence = next;
>+ single_shadow = true;
> }
> }
> mutex_unlock(&adev->shadow_list_lock);
>@@ -3206,7 +3209,8 @@ static int amdgpu_device_recover_vram(struct
>amdgpu_device *adev)
> tmo = dma_fence_wait_timeout(fence, false, tmo);
> dma_fence_put(fence);
>
>- if (r <= 0 || tmo <= 0) {
>+ /* r would be zero even if amdgpu_bo_restore_shadow succeeded when
>single shadow in list */
>+ if (r < 0 || (r == 0 && !single_shadow) || tmo <= 0) {
> DRM_ERROR("recover vram bo from shadow failed\n");
> return -EIO;
> }
>--
>2.7.4
>
>_______________________________________________
>amd-gfx mailing list
>amd-gfx at lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list