| From 76ea02802259f38f7748d1555c392230891ebdbc Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 6 Feb 2026 19:53:05 +0530 |
| Subject: drm/amdgpu: Fix missing unwind in amdgpu_ib_schedule() error path |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com> |
| |
| [ Upstream commit ba038065655c45728be346d0b174a6da08d8a5c5 ] |
| |
| amdgpu_ib_schedule() returns early after calling amdgpu_ring_undo(). |
| This skips the common free_fence cleanup path. Other error paths were |
| already changed to use goto free_fence, but this one was missed. |
| |
| Change the early return to goto free_fence so all error paths clean up |
| the same way. |
| |
| Fixes the below: |
| drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c:232 amdgpu_ib_schedule() |
| warn: missing unwind goto? |
| |
| drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c |
| 124 int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs, |
| 125 struct amdgpu_ib *ibs, struct amdgpu_job *job, |
| 126 struct dma_fence **f) |
| 127 { |
| |
| ... |
| |
| 224 |
| 225 if (ring->funcs->insert_start) |
| 226 ring->funcs->insert_start(ring); |
| 227 |
| 228 if (job) { |
| 229 r = amdgpu_vm_flush(ring, job, need_pipe_sync); |
| 230 if (r) { |
| 231 amdgpu_ring_undo(ring); |
| --> 232 return r; |
| |
| The patch changed the other error paths to goto free_fence but |
| this one was accidentally skipped. |
| |
| 233 } |
| 234 } |
| 235 |
| 236 amdgpu_ring_ib_begin(ring); |
| |
| ... |
| |
| 338 |
| 339 free_fence: |
| 340 if (!job) |
| 341 kfree(af); |
| 342 return r; |
| 343 } |
| |
| Fixes: f903b85ed0f1 ("drm/amdgpu: fix possible fence leaks from job structure") |
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org> |
| Cc: Alex Deucher <alexander.deucher@amd.com> |
| Cc: Christian Kรถnig <christian.koenig@amd.com> |
| Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com> |
| Reviewed-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c |
| index 44f230d67da24..bfa64cd7a62d4 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c |
| @@ -229,7 +229,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs, |
| r = amdgpu_vm_flush(ring, job, need_pipe_sync); |
| if (r) { |
| amdgpu_ring_undo(ring); |
| - return r; |
| + goto free_fence; |
| } |
| } |
| |
| -- |
| 2.51.0 |
| |