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:
parent
4a2b6662c3
commit
f54b350d89
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue