Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41a05a3a authored by Daniel Vetter's avatar Daniel Vetter
Browse files

drm/i915: streamline hsw_pm_irq_handler



The if (pm_iir & ~GEN6_PM_RPS_EVENTS) check was redunandant. Otoh
adding a check for rps events allows us to avoid the spinlock grabbing
for VECS interrupts.

v2: Drop misplaced hunk which now moved to the right patch.

Reviewed-by: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent d0ecd7e2
Loading
Loading
Loading
Loading
+9 −11
Original line number Diff line number Diff line
@@ -963,18 +963,17 @@ static void dp_aux_irq_handler(struct drm_device *dev)
static void hsw_pm_irq_handler(struct drm_i915_private *dev_priv,
			       u32 pm_iir)
{
	if (pm_iir & GEN6_PM_RPS_EVENTS) {
		spin_lock(&dev_priv->rps.lock);
		dev_priv->rps.pm_iir |= pm_iir & GEN6_PM_RPS_EVENTS;
	if (dev_priv->rps.pm_iir) {
		I915_WRITE(GEN6_PMIMR, dev_priv->rps.pm_iir);
		/* never want to mask useful interrupts. (also posting read) */
		WARN_ON(I915_READ_NOTRACE(GEN6_PMIMR) & ~GEN6_PM_RPS_EVENTS);
		/* TODO: if queue_work is slow, move it out of the spinlock */
		queue_work(dev_priv->wq, &dev_priv->rps.work);
	}
		spin_unlock(&dev_priv->rps.lock);
	}

	if (pm_iir & ~GEN6_PM_RPS_EVENTS) {
	if (pm_iir & PM_VEBOX_USER_INTERRUPT)
		notify_ring(dev_priv->dev, &dev_priv->ring[VECS]);

@@ -983,7 +982,6 @@ static void hsw_pm_irq_handler(struct drm_i915_private *dev_priv,
		i915_handle_error(dev_priv->dev, false);
	}
}
}

static irqreturn_t valleyview_irq_handler(int irq, void *arg)
{