drm/i915: Make for_each_engine_masked() more compact and quicker
authorChris Wilson <chris@chris-wilson.co.uk>
Sat, 27 Aug 2016 07:54:01 +0000 (08:54 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Sat, 27 Aug 2016 08:42:53 +0000 (09:42 +0100)
commitbafb0fced98c7c135389b455faab380beac47ccc
treea8dae563fcee3662435a8cf9a86bb903ae16e1f0
parentf6407193dd9d9e29fc94b7f6943c517cbee314bb
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
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem_request.c
drivers/gpu/drm/i915/i915_guc_submission.c
drivers/gpu/drm/i915/i915_irq.c
drivers/gpu/drm/i915/intel_uncore.c