Am 11.04.25 um 00:06 schrieb Rob Clark: > On Thu, Apr 10, 2025 at 9:33 AM Dan Carpenter <dan.carpen...@linaro.org> > wrote: >> We need to cleanup if the chain = dma_fence_chain_alloc() allocation >> fails. Now that we have multiple error returns in this function, switch >> to using an unwind ladder for cleanup. >> >> Fixes: c2d3a7300695 ("drm/syncobj: Extend EXPORT_SYNC_FILE for timeline >> syncobjs") >> Signed-off-by: Dan Carpenter <dan.carpen...@linaro.org> >> --- >> drivers/gpu/drm/drm_syncobj.c | 18 ++++++++++++++---- >> 1 file changed, 14 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c >> index 636cd83ca29e..c136d0c772dc 100644 >> --- a/drivers/gpu/drm/drm_syncobj.c >> +++ b/drivers/gpu/drm/drm_syncobj.c >> @@ -745,21 +745,24 @@ static int drm_syncobj_import_sync_file_fence(struct >> drm_file *file_private, >> { >> struct dma_fence *fence = sync_file_get_fence(fd); >> struct drm_syncobj *syncobj; >> + int ret; >> >> if (!fence) >> return -EINVAL; >> >> syncobj = drm_syncobj_find(file_private, handle); >> if (!syncobj) { >> - dma_fence_put(fence); >> - return -ENOENT; >> + ret = -ENOENT; >> + goto err_put_fence; >> } >> >> if (point) { >> struct dma_fence_chain *chain = dma_fence_chain_alloc(); >> >> - if (!chain) >> - return -ENOMEM; >> + if (!chain) { >> + ret = -ENOMEM; >> + goto err_put_syncobj; >> + } >> >> drm_syncobj_add_point(syncobj, chain, fence, point); >> } else { >> @@ -769,6 +772,13 @@ static int drm_syncobj_import_sync_file_fence(struct >> drm_file *file_private, >> dma_fence_put(fence); >> drm_syncobj_put(syncobj); >> return 0; >> + >> +err_put_syncobj: >> + drm_syncobj_put(syncobj); >> +err_put_fence: >> + dma_fence_put(fence); >> + >> + return ret; > I suppose you could just initialize ret to zero and collapse the two > return paths? Either way,
Yep, good point. With that done Reviewed-by: Christian König <christian.koe...@amd.com> as well. Regards, Christian. > > Reviewed-by: Rob Clark <robdcl...@gmail.com> > >> } >> >> static int drm_syncobj_export_sync_file(struct drm_file *file_private, >> -- >> 2.47.2 >>