From: Ville Syrjälä <[email protected]> Define GEN11_GT_IRQS (we already have the gen8 counterpart GEN8_GT_IRQS) and use it to skip the entire gen11_gt_irq_handler() call if none of the relevant bits are set, as a micro optimization.
In addition to the redundant function call we also now skip the redundant gt->irq_lock spinlock which is taken unconditionally in gen11_gt_irq_handler(). Signed-off-by: Ville Syrjälä <[email protected]> --- drivers/gpu/drm/i915/gt/intel_gt_irq.h | 3 +++ drivers/gpu/drm/i915/i915_irq.c | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/intel_gt_irq.h b/drivers/gpu/drm/i915/gt/intel_gt_irq.h index 41cad38668c5..c8cc247778f0 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_irq.h +++ b/drivers/gpu/drm/i915/gt/intel_gt_irq.h @@ -12,6 +12,9 @@ struct intel_gt; +#define GEN11_GT_IRQS (GEN11_GT_DW_IRQ(0) | \ + GEN11_GT_DW_IRQ(1)) + #define GEN8_GT_IRQS (GEN8_GT_RCS_IRQ | \ GEN8_GT_BCS_IRQ | \ GEN8_GT_VCS0_IRQ | \ diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 448c4730d178..b3fc3e31a5d4 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -527,7 +527,8 @@ static irqreturn_t gen11_irq_handler(int irq, void *arg) } /* Find, queue (onto bottom-halves), then clear each source */ - gen11_gt_irq_handler(gt, master_ctl); + if (master_ctl & GEN11_GT_IRQS) + gen11_gt_irq_handler(gt, master_ctl); /* IRQs are synced during runtime_suspend, we don't require a wakeref */ if (master_ctl & GEN11_DISPLAY_IRQ) @@ -596,7 +597,8 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg) return IRQ_NONE; } - gen11_gt_irq_handler(gt, master_ctl); + if (master_ctl & GEN11_GT_IRQS) + gen11_gt_irq_handler(gt, master_ctl); if (master_ctl & GEN11_DISPLAY_IRQ) intel_display_irq_handler(display, NULL); -- 2.56.0
