diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-09-15 05:38:57 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-09-19 08:43:13 -0400 |
commit | 7cd512f1520f85bf8e45f75b82fece58f0265cec (patch) | |
tree | 7d07a85afba99cadfcabe4715fe405bc9b9d1eef /drivers/gpu/drm/i915/intel_ringbuffer.c | |
parent | 950eabaf5a87257040e0c207be09487954113f54 (diff) |
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: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 25795f2efdcb..922d6bc1a1b3 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
@@ -1197,7 +1197,7 @@ gen5_ring_get_irq(struct intel_engine_cs *ring) | |||
1197 | struct drm_i915_private *dev_priv = dev->dev_private; | 1197 | struct drm_i915_private *dev_priv = dev->dev_private; |
1198 | unsigned long flags; | 1198 | unsigned long flags; |
1199 | 1199 | ||
1200 | if (!dev->irq_enabled) | 1200 | if (WARN_ON(!intel_irqs_enabled(dev_priv))) |
1201 | return false; | 1201 | return false; |
1202 | 1202 | ||
1203 | spin_lock_irqsave(&dev_priv->irq_lock, flags); | 1203 | spin_lock_irqsave(&dev_priv->irq_lock, flags); |
@@ -1228,7 +1228,7 @@ i9xx_ring_get_irq(struct intel_engine_cs *ring) | |||
1228 | struct drm_i915_private *dev_priv = dev->dev_private; | 1228 | struct drm_i915_private *dev_priv = dev->dev_private; |
1229 | unsigned long flags; | 1229 | unsigned long flags; |
1230 | 1230 | ||
1231 | if (!dev->irq_enabled) | 1231 | if (!intel_irqs_enabled(dev_priv)) |
1232 | return false; | 1232 | return false; |
1233 | 1233 | ||
1234 | spin_lock_irqsave(&dev_priv->irq_lock, flags); | 1234 | spin_lock_irqsave(&dev_priv->irq_lock, flags); |
@@ -1265,7 +1265,7 @@ i8xx_ring_get_irq(struct intel_engine_cs *ring) | |||
1265 | struct drm_i915_private *dev_priv = dev->dev_private; | 1265 | struct drm_i915_private *dev_priv = dev->dev_private; |
1266 | unsigned long flags; | 1266 | unsigned long flags; |
1267 | 1267 | ||
1268 | if (!dev->irq_enabled) | 1268 | if (!intel_irqs_enabled(dev_priv)) |
1269 | return false; | 1269 | return false; |
1270 | 1270 | ||
1271 | spin_lock_irqsave(&dev_priv->irq_lock, flags); | 1271 | spin_lock_irqsave(&dev_priv->irq_lock, flags); |
@@ -1399,8 +1399,8 @@ gen6_ring_get_irq(struct intel_engine_cs *ring) | |||
1399 | struct drm_i915_private *dev_priv = dev->dev_private; | 1399 | struct drm_i915_private *dev_priv = dev->dev_private; |
1400 | unsigned long flags; | 1400 | unsigned long flags; |
1401 | 1401 | ||
1402 | if (!dev->irq_enabled) | 1402 | if (WARN_ON(!intel_irqs_enabled(dev_priv))) |
1403 | return false; | 1403 | return false; |
1404 | 1404 | ||
1405 | spin_lock_irqsave(&dev_priv->irq_lock, flags); | 1405 | spin_lock_irqsave(&dev_priv->irq_lock, flags); |
1406 | if (ring->irq_refcount++ == 0) { | 1406 | if (ring->irq_refcount++ == 0) { |
@@ -1442,7 +1442,7 @@ hsw_vebox_get_irq(struct intel_engine_cs *ring) | |||
1442 | struct drm_i915_private *dev_priv = dev->dev_private; | 1442 | struct drm_i915_private *dev_priv = dev->dev_private; |
1443 | unsigned long flags; | 1443 | unsigned long flags; |
1444 | 1444 | ||
1445 | if (!dev->irq_enabled) | 1445 | if (WARN_ON(!intel_irqs_enabled(dev_priv))) |
1446 | return false; | 1446 | return false; |
1447 | 1447 | ||
1448 | spin_lock_irqsave(&dev_priv->irq_lock, flags); | 1448 | spin_lock_irqsave(&dev_priv->irq_lock, flags); |
@@ -1462,9 +1462,6 @@ hsw_vebox_put_irq(struct intel_engine_cs *ring) | |||
1462 | struct drm_i915_private *dev_priv = dev->dev_private; | 1462 | struct drm_i915_private *dev_priv = dev->dev_private; |
1463 | unsigned long flags; | 1463 | unsigned long flags; |
1464 | 1464 | ||
1465 | if (!dev->irq_enabled) | ||
1466 | return; | ||
1467 | |||
1468 | spin_lock_irqsave(&dev_priv->irq_lock, flags); | 1465 | spin_lock_irqsave(&dev_priv->irq_lock, flags); |
1469 | if (--ring->irq_refcount == 0) { | 1466 | if (--ring->irq_refcount == 0) { |
1470 | I915_WRITE_IMR(ring, ~0); | 1467 | I915_WRITE_IMR(ring, ~0); |
@@ -1480,7 +1477,7 @@ gen8_ring_get_irq(struct intel_engine_cs *ring) | |||
1480 | struct drm_i915_private *dev_priv = dev->dev_private; | 1477 | struct drm_i915_private *dev_priv = dev->dev_private; |
1481 | unsigned long flags; | 1478 | unsigned long flags; |
1482 | 1479 | ||
1483 | if (!dev->irq_enabled) | 1480 | if (WARN_ON(!intel_irqs_enabled(dev_priv))) |
1484 | return false; | 1481 | return false; |
1485 | 1482 | ||
1486 | spin_lock_irqsave(&dev_priv->irq_lock, flags); | 1483 | spin_lock_irqsave(&dev_priv->irq_lock, flags); |