Message ID | 1445333036-22164-3-git-send-email-nicholas.hoath@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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@intel.com> > Cc: Thomas Daniel <thomas.daniel@intel.com> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > Cc: Chris Wilson <chris@chris-wilson.co.uk> 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 >
On Tue, Oct 20, 2015 at 02:12:21PM +0200, Daniel Vetter wrote: > 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@intel.com> > > Cc: Thomas Daniel <thomas.daniel@intel.com> > > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > > Cc: Chris Wilson <chris@chris-wilson.co.uk> > > 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) Pray tell you fixed the formatting first? -Chris
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"); }
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@intel.com> Cc: Thomas Daniel <thomas.daniel@intel.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/i915_irq.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-)