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; }