diff mbox

drm/radeon: fix double free in radeon_gpu_reset

Message ID 1346239455-24932-1-git-send-email-deathsimple@vodafone.de (mailing list archive)
State New, archived
Headers show

Commit Message

Christian König Aug. 29, 2012, 11:24 a.m. UTC
radeon_ring_restore is freeing the memory for the saved
ring data. We need to remember that, otherwise we try to
restore the ring data again on the next try. Additional
to that it shouldn't try the reset infinitely if we have
saved ring data.

Signed-off-by: Christian König <deathsimple@vodafone.de>
---
 drivers/gpu/drm/radeon/radeon_device.c |    3 +++
 1 file changed, 3 insertions(+)

Comments

Alex Deucher Aug. 29, 2012, 1:54 p.m. UTC | #1
On Wed, Aug 29, 2012 at 7:24 AM, Christian König
<deathsimple@vodafone.de> wrote:
> radeon_ring_restore is freeing the memory for the saved
> ring data. We need to remember that, otherwise we try to
> restore the ring data again on the next try. Additional
> to that it shouldn't try the reset infinitely if we have
> saved ring data.
>
> Signed-off-by: Christian König <deathsimple@vodafone.de>

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/gpu/drm/radeon/radeon_device.c |    3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> index d2e2438..814194f 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -1346,12 +1346,15 @@ retry:
>                 for (i = 0; i < RADEON_NUM_RINGS; ++i) {
>                         radeon_ring_restore(rdev, &rdev->ring[i],
>                                             ring_sizes[i], ring_data[i]);
> +                       ring_sizes[i] = 0;
> +                       ring_data[i] = NULL;
>                 }
>
>                 r = radeon_ib_ring_tests(rdev);
>                 if (r) {
>                         dev_err(rdev->dev, "ib ring test failed (%d).\n", r);
>                         if (saved) {
> +                               saved = false;
>                                 radeon_suspend(rdev);
>                                 goto retry;
>                         }
> --
> 1.7.9.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox

Patch

diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index d2e2438..814194f 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1346,12 +1346,15 @@  retry:
 		for (i = 0; i < RADEON_NUM_RINGS; ++i) {
 			radeon_ring_restore(rdev, &rdev->ring[i],
 					    ring_sizes[i], ring_data[i]);
+			ring_sizes[i] = 0;
+			ring_data[i] = NULL;
 		}
 
 		r = radeon_ib_ring_tests(rdev);
 		if (r) {
 			dev_err(rdev->dev, "ib ring test failed (%d).\n", r);
 			if (saved) {
+				saved = false;
 				radeon_suspend(rdev);
 				goto retry;
 			}