diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-08-27 08:54:01 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-08-27 09:42:53 +0100 |
commit | bafb0fced98c7c135389b455faab380beac47ccc (patch) | |
tree | a8dae563fcee3662435a8cf9a86bb903ae16e1f0 /drivers/gpu/drm/i915/i915_gem_request.c | |
parent | f6407193dd9d9e29fc94b7f6943c517cbee314bb (diff) | |
download | blackbird-op-linux-bafb0fced98c7c135389b455faab380beac47ccc.tar.gz blackbird-op-linux-bafb0fced98c7c135389b455faab380beac47ccc.zip |
drm/i915: Make for_each_engine_masked() more compact and quicker
Rather than walk the full array of engines checking whether each is in
the mask in turn, we can use the mask to jump to the right engines. This
should quicker for a sparse array of engines or mask, whilst generating
smaller code:
text data bss dec hex filename
1251010 4579 800 1256389 132bc5 drivers/gpu/drm/i915/i915.ko
1250530 4579 800 1255909 1329e5 drivers/gpu/drm/i915/i915.ko
The downside is that we have to pass in a temporary, alas no C99
iterators yet.
[P.S. Joonas doesn't like having to pass extra temporaries into the
macro, and even less that I called them tmp. As yet, we haven't found a
macro that avoids passing in a temporary that is smaller. We probably
will get C99 iterators first!]
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20160827075401.16470-2-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_request.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_request.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c index 5e55270bb2de..9cc08a1e43c6 100644 --- a/drivers/gpu/drm/i915/i915_gem_request.c +++ b/drivers/gpu/drm/i915/i915_gem_request.c @@ -766,6 +766,7 @@ static bool engine_retire_requests(struct intel_engine_cs *engine) void i915_gem_retire_requests(struct drm_i915_private *dev_priv) { struct intel_engine_cs *engine; + unsigned int tmp; lockdep_assert_held(&dev_priv->drm.struct_mutex); @@ -774,7 +775,7 @@ void i915_gem_retire_requests(struct drm_i915_private *dev_priv) GEM_BUG_ON(!dev_priv->gt.awake); - for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines) + for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines, tmp) if (engine_retire_requests(engine)) dev_priv->gt.active_engines &= ~intel_engine_flag(engine); |