[Intel-gfx] [PATCH v2] drm/i915: Remove redundant i915_request_await_object in blit clears
Ruhl, Michael J
michael.j.ruhl at intel.com
Mon Jun 15 17:58:49 UTC 2020
>-----Original Message-----
>From: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
>Sent: Monday, June 15, 2020 12:16 PM
>To: Ruhl, Michael J <michael.j.ruhl at intel.com>; Intel-
>gfx at lists.freedesktop.org
>Cc: Ursulin, Tvrtko <tvrtko.ursulin at intel.com>; Auld, Matthew
><matthew.auld at intel.com>; Chris Wilson <chris at chris-wilson.co.uk>
>Subject: Re: [PATCH v2] drm/i915: Remove redundant
>i915_request_await_object in blit clears
>
>
>On 15/06/2020 17:11, Ruhl, Michael J wrote:
>>> -----Original Message-----
>>> From: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
>>> Sent: Monday, June 15, 2020 11:15 AM
>>> To: Intel-gfx at lists.freedesktop.org
>>> Cc: Ursulin, Tvrtko <tvrtko.ursulin at intel.com>; Auld, Matthew
>>> <matthew.auld at intel.com>; Chris Wilson <chris at chris-wilson.co.uk>;
>Ruhl,
>>> Michael J <michael.j.ruhl at intel.com>
>>> Subject: [PATCH v2] drm/i915: Remove redundant
>i915_request_await_object
>>> in blit clears
>>>
>>> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>>>
>>> One i915_request_await_object is enough and we keep the one under the
>>> object lock so it is final.
>>>
>>> At the same time move async clflushing setup under the same locked
>>> section and consolidate common code into a helper function.
>>>
>>> v2:
>>> * Emit initial breadcrumbs after aways are set up. (Chris)
>>>
>>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>>> Cc: Matthew Auld <matthew.auld at intel.com>
>>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>>> Cc: Michael J. Ruhl <michael.j.ruhl at intel.com>
>>> ---
>>> .../gpu/drm/i915/gem/i915_gem_object_blt.c | 52 ++++++++-----------
>>> 1 file changed, 21 insertions(+), 31 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_blt.c
>>> b/drivers/gpu/drm/i915/gem/i915_gem_object_blt.c
>>> index f457d7130491..bfdb32d46877 100644
>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_blt.c
>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_blt.c
>>> @@ -126,6 +126,17 @@ void intel_emit_vma_release(struct intel_context
>>> *ce, struct i915_vma *vma)
>>> intel_engine_pm_put(ce->engine);
>>> }
>>>
>>> +static int
>>> +move_obj_to_gpu(struct drm_i915_gem_object *obj,
>>
>> I am not understanding the name of this function.
>>
>> How is the object moved to the gpu? Is clflush a move? Or is
>> it that it is moving to the gpu domain?
>>
>> What about:
>>
>> obj_flush_and_wait()
>>
>> or just:
>>
>> flush_and_wait()
>>
>> ?
>>
>> Or am I missing something? 😊
>
>Yes, the fact I have renamed the existing move_to_gpu to move_obj_to_gpu
>while moving it up in the file and so risked falling victim to bike
>shedding now. :D
Ok.
Code path makes sense to me.
Reviewed-by: Michael J. Ruhl <michael.j.ruhl at intel.com>
M
>
>Regards,
>
>Tvrtko
>
>>
>> Mike
>>
>>> + struct i915_request *rq,
>>> + bool write)
>>> +{
>>> + if (obj->cache_dirty & ~obj->cache_coherent)
>>> + i915_gem_clflush_object(obj, 0);
>>> +
>>> + return i915_request_await_object(rq, obj, write);
>>> +}
>>> +
>>> int i915_gem_object_fill_blt(struct drm_i915_gem_object *obj,
>>> struct intel_context *ce,
>>> u32 value)
>>> @@ -143,12 +154,6 @@ int i915_gem_object_fill_blt(struct
>>> drm_i915_gem_object *obj,
>>> if (unlikely(err))
>>> return err;
>>>
>>> - if (obj->cache_dirty & ~obj->cache_coherent) {
>>> - i915_gem_object_lock(obj);
>>> - i915_gem_clflush_object(obj, 0);
>>> - i915_gem_object_unlock(obj);
>>> - }
>>> -
>>> batch = intel_emit_vma_fill_blt(ce, vma, value);
>>> if (IS_ERR(batch)) {
>>> err = PTR_ERR(batch);
>>> @@ -165,27 +170,22 @@ int i915_gem_object_fill_blt(struct
>>> drm_i915_gem_object *obj,
>>> if (unlikely(err))
>>> goto out_request;
>>>
>>> - err = i915_request_await_object(rq, obj, true);
>>> - if (unlikely(err))
>>> - goto out_request;
>>> -
>>> - if (ce->engine->emit_init_breadcrumb) {
>>> - err = ce->engine->emit_init_breadcrumb(rq);
>>> - if (unlikely(err))
>>> - goto out_request;
>>> - }
>>> -
>>> i915_vma_lock(vma);
>>> - err = i915_request_await_object(rq, vma->obj, true);
>>> + err = move_obj_to_gpu(vma->obj, rq, true);
>>> if (err == 0)
>>> err = i915_vma_move_to_active(vma, rq,
>>> EXEC_OBJECT_WRITE);
>>> i915_vma_unlock(vma);
>>> if (unlikely(err))
>>> goto out_request;
>>>
>>> - err = ce->engine->emit_bb_start(rq,
>>> - batch->node.start, batch->node.size,
>>> - 0);
>>> + if (ce->engine->emit_init_breadcrumb)
>>> + err = ce->engine->emit_init_breadcrumb(rq);
>>> +
>>> + if (likely(!err))
>>> + err = ce->engine->emit_bb_start(rq,
>>> + batch->node.start,
>>> + batch->node.size,
>>> + 0);
>>> out_request:
>>> if (unlikely(err))
>>> i915_request_set_error_once(rq, err);
>>> @@ -317,16 +317,6 @@ struct i915_vma *intel_emit_vma_copy_blt(struct
>>> intel_context *ce,
>>> return ERR_PTR(err);
>>> }
>>>
>>> -static int move_to_gpu(struct i915_vma *vma, struct i915_request *rq,
>bool
>>> write)
>>> -{
>>> - struct drm_i915_gem_object *obj = vma->obj;
>>> -
>>> - if (obj->cache_dirty & ~obj->cache_coherent)
>>> - i915_gem_clflush_object(obj, 0);
>>> -
>>> - return i915_request_await_object(rq, obj, write);
>>> -}
>>> -
>>> int i915_gem_object_copy_blt(struct drm_i915_gem_object *src,
>>> struct drm_i915_gem_object *dst,
>>> struct intel_context *ce)
>>> @@ -375,7 +365,7 @@ int i915_gem_object_copy_blt(struct
>>> drm_i915_gem_object *src,
>>> goto out_request;
>>>
>>> for (i = 0; i < ARRAY_SIZE(vma); i++) {
>>> - err = move_to_gpu(vma[i], rq, i);
>>> + err = move_obj_to_gpu(vma[i]->obj, rq, i);
>>> if (unlikely(err))
>>> goto out_unlock;
>>> }
>>> --
>>> 2.20.1
>>
More information about the Intel-gfx
mailing list