On Fri, Feb 6, 2026 at 9:32 AM Srinivasan Shanmugam <[email protected]> wrote: > > If amdgpu_vm_flush() fails, 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 <[email protected]> > Cc: Alex Deucher <[email protected]> > Cc: Christian König <[email protected]> > Signed-off-by: Srinivasan Shanmugam <[email protected]>
Reviewed-by: Alex Deucher <[email protected]> > --- > 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 44f230d67da2..bfa64cd7a62d 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.34.1 >
