瀏覽代碼

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>
Christian König 12 年之前
父節點
當前提交
f54b350d89
共有 1 個文件被更改,包括 3 次插入0 次删除
  1. 3 0
      drivers/gpu/drm/radeon/radeon_device.c

+ 3 - 0
drivers/gpu/drm/radeon/radeon_device.c

@@ -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;
 			}
 			}