On Tue, Oct 20, 2015 at 10:23:52AM +0100, Nick Hoath wrote: > Break out common code from gen8_gt_irq_handler and put it in to > an always inlined function. gcc optimises out the shift at compile > time. (Thomas Daniel/Daniel Vetter/Chris Wilson) > > Issue: VIZ-4277 > Signed-off-by: Nick Hoath <nicholas.hoath@xxxxxxxxx> > Cc: Thomas Daniel <thomas.daniel@xxxxxxxxx> > Cc: Daniel Vetter <daniel.vetter@xxxxxxxx> > Cc: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> Merged the first two patches to dinq, thanks. -Daniel > --- > drivers/gpu/drm/i915/i915_irq.c | 40 ++++++++++++++++++++-------------------- > 1 file changed, 20 insertions(+), 20 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c > index fbf9153..7837f5e 100644 > --- a/drivers/gpu/drm/i915/i915_irq.c > +++ b/drivers/gpu/drm/i915/i915_irq.c > @@ -1290,6 +1290,16 @@ static void snb_gt_irq_handler(struct drm_device *dev, > ivybridge_parity_error_irq_handler(dev, gt_iir); > } > > +static __always_inline void > + gen8_cs_irq_handler(struct intel_engine_cs *ring, u32 iir, > + int test_shift) > +{ > + if (iir & (GT_RENDER_USER_INTERRUPT << test_shift)) > + notify_ring(ring); > + if (iir & (GT_CONTEXT_SWITCH_INTERRUPT << test_shift)) > + intel_lrc_irq_handler(ring); > +} > + > static irqreturn_t gen8_gt_irq_handler(struct drm_i915_private *dev_priv, > u32 master_ctl) > { > @@ -1301,15 +1311,11 @@ static irqreturn_t gen8_gt_irq_handler(struct drm_i915_private *dev_priv, > I915_WRITE_FW(GEN8_GT_IIR(0), iir); > ret = IRQ_HANDLED; > > - if (iir & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_RCS_IRQ_SHIFT)) > - intel_lrc_irq_handler(&dev_priv->ring[RCS]); > - if (iir & (GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT)) > - notify_ring(&dev_priv->ring[RCS]); > + gen8_cs_irq_handler(&dev_priv->ring[RCS], > + iir, GEN8_RCS_IRQ_SHIFT); > > - if (iir & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_BCS_IRQ_SHIFT)) > - intel_lrc_irq_handler(&dev_priv->ring[BCS]); > - if (iir & (GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT)) > - notify_ring(&dev_priv->ring[BCS]); > + gen8_cs_irq_handler(&dev_priv->ring[BCS], > + iir, GEN8_BCS_IRQ_SHIFT); > } else > DRM_ERROR("The master control interrupt lied (GT0)!\n"); > } > @@ -1320,15 +1326,11 @@ static irqreturn_t gen8_gt_irq_handler(struct drm_i915_private *dev_priv, > I915_WRITE_FW(GEN8_GT_IIR(1), iir); > ret = IRQ_HANDLED; > > - if (iir & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS1_IRQ_SHIFT)) > - intel_lrc_irq_handler(&dev_priv->ring[VCS]); > - if (iir & (GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT)) > - notify_ring(&dev_priv->ring[VCS]); > + gen8_cs_irq_handler(&dev_priv->ring[VCS], > + iir, GEN8_VCS1_IRQ_SHIFT); > > - if (iir & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS2_IRQ_SHIFT)) > - intel_lrc_irq_handler(&dev_priv->ring[VCS2]); > - if (iir & (GT_RENDER_USER_INTERRUPT << GEN8_VCS2_IRQ_SHIFT)) > - notify_ring(&dev_priv->ring[VCS2]); > + gen8_cs_irq_handler(&dev_priv->ring[VCS2], > + iir, GEN8_VCS2_IRQ_SHIFT); > } else > DRM_ERROR("The master control interrupt lied (GT1)!\n"); > } > @@ -1339,10 +1341,8 @@ static irqreturn_t gen8_gt_irq_handler(struct drm_i915_private *dev_priv, > I915_WRITE_FW(GEN8_GT_IIR(3), iir); > ret = IRQ_HANDLED; > > - if (iir & (GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VECS_IRQ_SHIFT)) > - intel_lrc_irq_handler(&dev_priv->ring[VECS]); > - if (iir & (GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT)) > - notify_ring(&dev_priv->ring[VECS]); > + gen8_cs_irq_handler(&dev_priv->ring[VECS], > + iir, GEN8_VECS_IRQ_SHIFT); > } else > DRM_ERROR("The master control interrupt lied (GT3)!\n"); > } > -- > 1.9.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx