Commit f54b350d authored by Christian König's avatar Christian König Committed by Alex Deucher

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: default avatarChristian König <deathsimple@vodafone.de>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 4a2b6662
...@@ -1346,12 +1346,15 @@ int radeon_gpu_reset(struct radeon_device *rdev) ...@@ -1346,12 +1346,15 @@ int radeon_gpu_reset(struct radeon_device *rdev)
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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment