提交 7cd512f1 编写于 作者: D Daniel Vetter

drm/i915: Fix irq checks in ring->irq_get/put functions

Yet another place that wasn't properly transformed when implementing
SOix. While at it convert the checks to WARN_ON on gen5+ (since we
don't have UMS potentially doing stupid things on those platforms).
And also add the corresponding checks to the put functions (again with
a WARN_ON) for gen5+.

v2: Drop the WARNINGS in the irq_put functions (including the existing
one for vebox), Chris convinced me that they're not that terribly
useful.

v3: Don't forget about execlist code.

Cc: Imre Deak <imre.deak@intel.com>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: "Volkin, Bradley D" <bradley.d.volkin@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
上级 950eabaf
...@@ -1063,7 +1063,7 @@ static bool gen8_logical_ring_get_irq(struct intel_engine_cs *ring) ...@@ -1063,7 +1063,7 @@ static bool gen8_logical_ring_get_irq(struct intel_engine_cs *ring)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long flags; unsigned long flags;
if (!dev->irq_enabled) if (WARN_ON(!intel_irqs_enabled(dev_priv)))
return false; return false;
spin_lock_irqsave(&dev_priv->irq_lock, flags); spin_lock_irqsave(&dev_priv->irq_lock, flags);
......
...@@ -1197,7 +1197,7 @@ gen5_ring_get_irq(struct intel_engine_cs *ring) ...@@ -1197,7 +1197,7 @@ gen5_ring_get_irq(struct intel_engine_cs *ring)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long flags; unsigned long flags;
if (!dev->irq_enabled) if (WARN_ON(!intel_irqs_enabled(dev_priv)))
return false; return false;
spin_lock_irqsave(&dev_priv->irq_lock, flags); spin_lock_irqsave(&dev_priv->irq_lock, flags);
...@@ -1228,7 +1228,7 @@ i9xx_ring_get_irq(struct intel_engine_cs *ring) ...@@ -1228,7 +1228,7 @@ i9xx_ring_get_irq(struct intel_engine_cs *ring)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long flags; unsigned long flags;
if (!dev->irq_enabled) if (!intel_irqs_enabled(dev_priv))
return false; return false;
spin_lock_irqsave(&dev_priv->irq_lock, flags); spin_lock_irqsave(&dev_priv->irq_lock, flags);
...@@ -1265,7 +1265,7 @@ i8xx_ring_get_irq(struct intel_engine_cs *ring) ...@@ -1265,7 +1265,7 @@ i8xx_ring_get_irq(struct intel_engine_cs *ring)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long flags; unsigned long flags;
if (!dev->irq_enabled) if (!intel_irqs_enabled(dev_priv))
return false; return false;
spin_lock_irqsave(&dev_priv->irq_lock, flags); spin_lock_irqsave(&dev_priv->irq_lock, flags);
...@@ -1399,8 +1399,8 @@ gen6_ring_get_irq(struct intel_engine_cs *ring) ...@@ -1399,8 +1399,8 @@ gen6_ring_get_irq(struct intel_engine_cs *ring)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long flags; unsigned long flags;
if (!dev->irq_enabled) if (WARN_ON(!intel_irqs_enabled(dev_priv)))
return false; return false;
spin_lock_irqsave(&dev_priv->irq_lock, flags); spin_lock_irqsave(&dev_priv->irq_lock, flags);
if (ring->irq_refcount++ == 0) { if (ring->irq_refcount++ == 0) {
...@@ -1442,7 +1442,7 @@ hsw_vebox_get_irq(struct intel_engine_cs *ring) ...@@ -1442,7 +1442,7 @@ hsw_vebox_get_irq(struct intel_engine_cs *ring)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long flags; unsigned long flags;
if (!dev->irq_enabled) if (WARN_ON(!intel_irqs_enabled(dev_priv)))
return false; return false;
spin_lock_irqsave(&dev_priv->irq_lock, flags); spin_lock_irqsave(&dev_priv->irq_lock, flags);
...@@ -1462,9 +1462,6 @@ hsw_vebox_put_irq(struct intel_engine_cs *ring) ...@@ -1462,9 +1462,6 @@ hsw_vebox_put_irq(struct intel_engine_cs *ring)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long flags; unsigned long flags;
if (!dev->irq_enabled)
return;
spin_lock_irqsave(&dev_priv->irq_lock, flags); spin_lock_irqsave(&dev_priv->irq_lock, flags);
if (--ring->irq_refcount == 0) { if (--ring->irq_refcount == 0) {
I915_WRITE_IMR(ring, ~0); I915_WRITE_IMR(ring, ~0);
...@@ -1480,7 +1477,7 @@ gen8_ring_get_irq(struct intel_engine_cs *ring) ...@@ -1480,7 +1477,7 @@ gen8_ring_get_irq(struct intel_engine_cs *ring)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long flags; unsigned long flags;
if (!dev->irq_enabled) if (WARN_ON(!intel_irqs_enabled(dev_priv)))
return false; return false;
spin_lock_irqsave(&dev_priv->irq_lock, flags); spin_lock_irqsave(&dev_priv->irq_lock, flags);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册