drm/radeon: fix double free in radeon_gpu_reset

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>
This commit is contained in:
Christian König 2012-08-29 13:24:15 +02:00 committed by Alex Deucher
parent 4a2b6662c3
commit f54b350d89
1 changed files with 3 additions and 0 deletions

View File

@ -1346,12 +1346,15 @@ retry:
for (i = 0; i < RADEON_NUM_RINGS; ++i) { for (i = 0; i < RADEON_NUM_RINGS; ++i) {
radeon_ring_restore(rdev, &rdev->ring[i], radeon_ring_restore(rdev, &rdev->ring[i],
ring_sizes[i], ring_data[i]); ring_sizes[i], ring_data[i]);
ring_sizes[i] = 0;
ring_data[i] = NULL;
} }
r = radeon_ib_ring_tests(rdev); r = radeon_ib_ring_tests(rdev);
if (r) { if (r) {
dev_err(rdev->dev, "ib ring test failed (%d).\n", r); dev_err(rdev->dev, "ib ring test failed (%d).\n", r);
if (saved) { if (saved) {
saved = false;
radeon_suspend(rdev); radeon_suspend(rdev);
goto retry; goto retry;
} }