Message ID | 20210922091044.2612-19-christian.koenig@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/26] dma-buf: add dma_resv_for_each_fence_unlocked v4 | expand |
On 22/09/2021 10:10, Christian König wrote: > This is maybe even a fix since the RCU usage here looks incorrect. I'm afraid I gazumped you here by removing this function shortly before you posted the respin. Regards, Tvrtko > Signed-off-by: Christian König <christian.koenig@amd.com> > --- > drivers/gpu/drm/i915/gem/i915_gem_object.h | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h > index 48112b9d76df..e20efffce3a9 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h > @@ -507,16 +507,16 @@ static inline struct intel_engine_cs * > i915_gem_object_last_write_engine(struct drm_i915_gem_object *obj) > { > struct intel_engine_cs *engine = NULL; > + struct dma_resv_iter cursor; > struct dma_fence *fence; > > - rcu_read_lock(); > - fence = dma_resv_get_excl_unlocked(obj->base.resv); > - rcu_read_unlock(); > - > - if (fence && dma_fence_is_i915(fence) && !dma_fence_is_signaled(fence)) > - engine = to_request(fence)->engine; > - dma_fence_put(fence); > - > + dma_resv_iter_begin(&cursor, obj->base.resv, false); > + dma_resv_for_each_fence_unlocked(&cursor, fence) { > + if (fence && dma_fence_is_i915(fence) && > + !dma_fence_is_signaled(fence)) > + engine = to_request(fence)->engine; > + } > + dma_resv_iter_end(&cursor); > return engine; > } > >
Am 22.09.21 um 12:27 schrieb Tvrtko Ursulin: > > On 22/09/2021 10:10, Christian König wrote: >> This is maybe even a fix since the RCU usage here looks incorrect. > > I'm afraid I gazumped you here by removing this function shortly > before you posted the respin. Is that already landed in drm-misc-next? If not just give me an Acked-by and it will be fixed when merging trees together again by just dropping the change. Alternatively if it is not in drm-next I will ping the drm-misc-next maintainer for a merge. Regards, Christian. > > Regards, > > Tvrtko > >> Signed-off-by: Christian König <christian.koenig@amd.com> >> --- >> drivers/gpu/drm/i915/gem/i915_gem_object.h | 16 ++++++++-------- >> 1 file changed, 8 insertions(+), 8 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h >> b/drivers/gpu/drm/i915/gem/i915_gem_object.h >> index 48112b9d76df..e20efffce3a9 100644 >> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h >> @@ -507,16 +507,16 @@ static inline struct intel_engine_cs * >> i915_gem_object_last_write_engine(struct drm_i915_gem_object *obj) >> { >> struct intel_engine_cs *engine = NULL; >> + struct dma_resv_iter cursor; >> struct dma_fence *fence; >> - rcu_read_lock(); >> - fence = dma_resv_get_excl_unlocked(obj->base.resv); >> - rcu_read_unlock(); >> - >> - if (fence && dma_fence_is_i915(fence) && >> !dma_fence_is_signaled(fence)) >> - engine = to_request(fence)->engine; >> - dma_fence_put(fence); >> - >> + dma_resv_iter_begin(&cursor, obj->base.resv, false); >> + dma_resv_for_each_fence_unlocked(&cursor, fence) { >> + if (fence && dma_fence_is_i915(fence) && >> + !dma_fence_is_signaled(fence)) >> + engine = to_request(fence)->engine; >> + } >> + dma_resv_iter_end(&cursor); >> return engine; >> } >>
On 22/09/2021 12:00, Christian König wrote: > Am 22.09.21 um 12:27 schrieb Tvrtko Ursulin: >> >> On 22/09/2021 10:10, Christian König wrote: >>> This is maybe even a fix since the RCU usage here looks incorrect. >> >> I'm afraid I gazumped you here by removing this function shortly >> before you posted the respin. > > Is that already landed in drm-misc-next? If not just give me an Acked-by > and it will be fixed when merging trees together again by just dropping > the change. > > Alternatively if it is not in drm-next I will ping the drm-misc-next > maintainer for a merge. Problem is you will never pass our CI with a series which does not apply to drm-tip. ;) Regards, Tvrtko > Regards, > Christian. > >> >> Regards, >> >> Tvrtko >> >>> Signed-off-by: Christian König <christian.koenig@amd.com> >>> --- >>> drivers/gpu/drm/i915/gem/i915_gem_object.h | 16 ++++++++-------- >>> 1 file changed, 8 insertions(+), 8 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h >>> b/drivers/gpu/drm/i915/gem/i915_gem_object.h >>> index 48112b9d76df..e20efffce3a9 100644 >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h >>> @@ -507,16 +507,16 @@ static inline struct intel_engine_cs * >>> i915_gem_object_last_write_engine(struct drm_i915_gem_object *obj) >>> { >>> struct intel_engine_cs *engine = NULL; >>> + struct dma_resv_iter cursor; >>> struct dma_fence *fence; >>> - rcu_read_lock(); >>> - fence = dma_resv_get_excl_unlocked(obj->base.resv); >>> - rcu_read_unlock(); >>> - >>> - if (fence && dma_fence_is_i915(fence) && >>> !dma_fence_is_signaled(fence)) >>> - engine = to_request(fence)->engine; >>> - dma_fence_put(fence); >>> - >>> + dma_resv_iter_begin(&cursor, obj->base.resv, false); >>> + dma_resv_for_each_fence_unlocked(&cursor, fence) { >>> + if (fence && dma_fence_is_i915(fence) && >>> + !dma_fence_is_signaled(fence)) >>> + engine = to_request(fence)->engine; >>> + } >>> + dma_resv_iter_end(&cursor); >>> return engine; >>> } >>> >
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h index 48112b9d76df..e20efffce3a9 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h @@ -507,16 +507,16 @@ static inline struct intel_engine_cs * i915_gem_object_last_write_engine(struct drm_i915_gem_object *obj) { struct intel_engine_cs *engine = NULL; + struct dma_resv_iter cursor; struct dma_fence *fence; - rcu_read_lock(); - fence = dma_resv_get_excl_unlocked(obj->base.resv); - rcu_read_unlock(); - - if (fence && dma_fence_is_i915(fence) && !dma_fence_is_signaled(fence)) - engine = to_request(fence)->engine; - dma_fence_put(fence); - + dma_resv_iter_begin(&cursor, obj->base.resv, false); + dma_resv_for_each_fence_unlocked(&cursor, fence) { + if (fence && dma_fence_is_i915(fence) && + !dma_fence_is_signaled(fence)) + engine = to_request(fence)->engine; + } + dma_resv_iter_end(&cursor); return engine; }
This is maybe even a fix since the RCU usage here looks incorrect. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/i915/gem/i915_gem_object.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)