[Intel-gfx] [PATCH 07/16] drm/i915: Inline check required for object syncing prior to execbuf

Chris Wilson chris at chris-wilson.co.uk
Wed Apr 29 07:22:14 PDT 2015


On Wed, Apr 29, 2015 at 03:03:43PM +0100, Tvrtko Ursulin wrote:
> 
> Hi,
> 
> On 04/27/2015 01:41 PM, Chris Wilson wrote:
> >This trims a little overhead from the common case of not needing to
> >synchronize between rings.
> >
> >v2: execlists is special and likes to duplicate code.
> >
> >Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> >---
> >  drivers/gpu/drm/i915/i915_gem_execbuffer.c | 10 +++++++---
> >  drivers/gpu/drm/i915/intel_lrc.c           |  9 ++++++---
> >  2 files changed, 13 insertions(+), 6 deletions(-)
> >
> >diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> >index 45d74da7f6c4..4fe09568089b 100644
> >--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> >+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> >@@ -889,6 +889,7 @@ static int
> >  i915_gem_execbuffer_move_to_gpu(struct intel_engine_cs *ring,
> >  				struct list_head *vmas)
> >  {
> >+	const unsigned other_rings = ~intel_ring_flag(ring);
> >  	struct i915_vma *vma;
> >  	uint32_t flush_domains = 0;
> >  	bool flush_chipset = false;
> >@@ -896,9 +897,12 @@ i915_gem_execbuffer_move_to_gpu(struct intel_engine_cs *ring,
> >
> >  	list_for_each_entry(vma, vmas, exec_list) {
> >  		struct drm_i915_gem_object *obj = vma->obj;
> >-		ret = i915_gem_object_sync(obj, ring);
> >-		if (ret)
> >-			return ret;
> >+
> >+		if (obj->active & other_rings) {
> >+			ret = i915_gem_object_sync(obj, ring);
> >+			if (ret)
> >+				return ret;
> >+		}
> 
> Just to avoid bailing out near the top of i915_gem_object_sync?

Yes. Every function where we spend more time in the push/pop preamble
than in the body is a function I don't want to call :)
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list