Re: [Intel-gfx] [PATCH 18/26] drm/i915: use new iterator in i915_gem_object_last_write_engine

Tvrtko Ursulin
2021-09-14T12:28:08Z

On 13/09/2021 14:16, Christian König wrote:
> This is maybe even a fix since the RCU usage here looks incorrect.

What you think is incorrect? Pointless extra rcu locking?

Also, FWIW, I submitted a patch to remove this function altogether since
its IMO pretty useless, just failed in getting anyone to ack it so far.

Regards,

Tvrtko

> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/i915/gem/i915_gem_object.h | 15 +++++++--------
> 1 file changed, 7 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 e9eecebf5c9d..3343922af4d6 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h
> @@ -500,16 +500,15 @@ 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_cursor 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_for_each_fence_unlocked(obj->base.resv, &cursor, false,
> + fence) {
> + if (fence && dma_fence_is_i915(fence) &&
> + !dma_fence_is_signaled(fence))
> + engine = to_request(fence)->engine;
> + }
> return engine;
> }
>
>