On Fri, Sep 17, 2021 at 02:34:59PM +0200, Christian König wrote: > Simplifying the code a bit. > > v2: use dma_resv_for_each_fence > > Signed-off-by: Christian König <christian.koenig@xxxxxxx> > --- > drivers/gpu/drm/scheduler/sched_main.c | 26 ++++++-------------------- > 1 file changed, 6 insertions(+), 20 deletions(-) > > diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c > index 042c16b5d54a..5bc5f775abe1 100644 > --- a/drivers/gpu/drm/scheduler/sched_main.c > +++ b/drivers/gpu/drm/scheduler/sched_main.c > @@ -699,30 +699,16 @@ int drm_sched_job_add_implicit_dependencies(struct drm_sched_job *job, > struct drm_gem_object *obj, > bool write) > { > + struct dma_resv_iter cursor; > + struct dma_fence *fence; > int ret; > - struct dma_fence **fences; > - unsigned int i, fence_count; > - > - if (!write) { > - struct dma_fence *fence = dma_resv_get_excl_unlocked(obj->resv); > - > - return drm_sched_job_add_dependency(job, fence); > - } > - > - ret = dma_resv_get_fences(obj->resv, NULL, &fence_count, &fences); > - if (ret || !fence_count) > - return ret; > > - for (i = 0; i < fence_count; i++) { > - ret = drm_sched_job_add_dependency(job, fences[i]); > + dma_resv_for_each_fence(&cursor, obj->resv, write, fence) { Hah I got tricked reading your 2nd patch, the iter_begin() is included and we don't need iter_end for this. Please correct my comments for patch 2 :-) On this as-is: Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > + ret = drm_sched_job_add_dependency(job, fence); > if (ret) > - break; > + return ret; > } > - > - for (; i < fence_count; i++) > - dma_fence_put(fences[i]); > - kfree(fences); > - return ret; > + return 0; > } > EXPORT_SYMBOL(drm_sched_job_add_implicit_dependencies); > > -- > 2.25.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch