From: Alex Deucher alexander.deucher@amd.com
Forget to unreserve after pinning. This can lead to problems in soft reset and resume.
Signed-off-by: Alex Deucher alexander.deucher@amd.com --- drivers/gpu/drm/radeon/si.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index ac7a199..23a114c 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c @@ -3005,6 +3005,7 @@ int si_rlc_init(struct radeon_device *rdev) si_rlc_fini(rdev); return r; } + radeon_bo_unreserve(rdev->rlc.save_restore_obj);
/* clear state block */ if (rdev->rlc.clear_state_obj == NULL) { @@ -3024,12 +3025,12 @@ int si_rlc_init(struct radeon_device *rdev) r = radeon_bo_pin(rdev->rlc.clear_state_obj, RADEON_GEM_DOMAIN_VRAM, &rdev->rlc.clear_state_gpu_addr); if (r) { - radeon_bo_unreserve(rdev->rlc.clear_state_obj); dev_warn(rdev->dev, "(%d) pin RLC c bo failed\n", r); si_rlc_fini(rdev); return r; } + radeon_bo_unreserve(rdev->rlc.clear_state_obj);
return 0; }
On Don, 2012-04-12 at 16:13 -0400, alexdeucher@gmail.com wrote:
From: Alex Deucher alexander.deucher@amd.com
Forget to unreserve after pinning. This can lead to problems in soft reset and resume.
Signed-off-by: Alex Deucher alexander.deucher@amd.com
[...]
@@ -3024,12 +3025,12 @@ int si_rlc_init(struct radeon_device *rdev) r = radeon_bo_pin(rdev->rlc.clear_state_obj, RADEON_GEM_DOMAIN_VRAM, &rdev->rlc.clear_state_gpu_addr); if (r) {
- radeon_bo_unreserve(rdev->rlc.clear_state_obj); dev_warn(rdev->dev, "(%d) pin RLC c bo failed\n", r); si_rlc_fini(rdev); return r; }
radeon_bo_unreserve(rdev->rlc.clear_state_obj);
return 0;
}
Instead of these two radeon_bo_unreserve calls, there could be one between the radeon_bo_pin call and the test of its return value.
Either way,
Reviewed-by: Michel Dänzer michel.daenzer@amd.com
From: Alex Deucher alexander.deucher@amd.com
Forget to unreserve after pinning. This can lead to problems in soft reset and resume.
v2: rework patch as per Michel's suggestion.
Signed-off-by: Alex Deucher alexander.deucher@amd.com Reviewed-by: Michel Dänzer michel.daenzer@amd.com --- drivers/gpu/drm/radeon/si.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index ac7a199..27bda98 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c @@ -2999,8 +2999,8 @@ int si_rlc_init(struct radeon_device *rdev) } r = radeon_bo_pin(rdev->rlc.save_restore_obj, RADEON_GEM_DOMAIN_VRAM, &rdev->rlc.save_restore_gpu_addr); + radeon_bo_unreserve(rdev->rlc.save_restore_obj); if (r) { - radeon_bo_unreserve(rdev->rlc.save_restore_obj); dev_warn(rdev->dev, "(%d) pin RLC sr bo failed\n", r); si_rlc_fini(rdev); return r; @@ -3023,9 +3023,8 @@ int si_rlc_init(struct radeon_device *rdev) } r = radeon_bo_pin(rdev->rlc.clear_state_obj, RADEON_GEM_DOMAIN_VRAM, &rdev->rlc.clear_state_gpu_addr); + radeon_bo_unreserve(rdev->rlc.clear_state_obj); if (r) { - - radeon_bo_unreserve(rdev->rlc.clear_state_obj); dev_warn(rdev->dev, "(%d) pin RLC c bo failed\n", r); si_rlc_fini(rdev); return r;
dri-devel@lists.freedesktop.org