diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-13 18:44:34 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-14 05:30:10 -0400 |
commit | b3b079dbef06c7f775178d561a4c8e47b7447139 (patch) | |
tree | 90b76ae31d7330d79ce98e1cea98d4a198e4c47c /drivers/gpu/drm/i915/i915_irq.c | |
parent | e2e767abd85806d05a5266b3b112baaf80ee3382 (diff) |
drm/i915: Reduce hangcheck frequency
By reducing the hangcheck frequency we check less often, conserving
resources, and still detect a lock up quickly. On a fast machine with a
slow GPU (like a Core2 paired with a 945G) it is easy for the hangcheck to
misfire as we check too fast.
Also once hung and if we fail to completely reset the chip, we have a
nasty habit of proclaming a hang many times a second and generating a
strobe-like display.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_irq.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index bc8438d6d843..e64b8eaa0b9d 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -328,7 +328,8 @@ static irqreturn_t ironlake_irq_handler(struct drm_device *dev) | |||
328 | trace_i915_gem_request_complete(dev, seqno); | 328 | trace_i915_gem_request_complete(dev, seqno); |
329 | DRM_WAKEUP(&dev_priv->render_ring.irq_queue); | 329 | DRM_WAKEUP(&dev_priv->render_ring.irq_queue); |
330 | dev_priv->hangcheck_count = 0; | 330 | dev_priv->hangcheck_count = 0; |
331 | mod_timer(&dev_priv->hangcheck_timer, jiffies + DRM_I915_HANGCHECK_PERIOD); | 331 | mod_timer(&dev_priv->hangcheck_timer, |
332 | jiffies + msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD)); | ||
332 | } | 333 | } |
333 | if (gt_iir & GT_BSD_USER_INTERRUPT) | 334 | if (gt_iir & GT_BSD_USER_INTERRUPT) |
334 | DRM_WAKEUP(&dev_priv->bsd_ring.irq_queue); | 335 | DRM_WAKEUP(&dev_priv->bsd_ring.irq_queue); |
@@ -1018,7 +1019,8 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS) | |||
1018 | trace_i915_gem_request_complete(dev, seqno); | 1019 | trace_i915_gem_request_complete(dev, seqno); |
1019 | DRM_WAKEUP(&dev_priv->render_ring.irq_queue); | 1020 | DRM_WAKEUP(&dev_priv->render_ring.irq_queue); |
1020 | dev_priv->hangcheck_count = 0; | 1021 | dev_priv->hangcheck_count = 0; |
1021 | mod_timer(&dev_priv->hangcheck_timer, jiffies + DRM_I915_HANGCHECK_PERIOD); | 1022 | mod_timer(&dev_priv->hangcheck_timer, |
1023 | jiffies + msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD)); | ||
1022 | } | 1024 | } |
1023 | 1025 | ||
1024 | if (HAS_BSD(dev) && (iir & I915_BSD_USER_INTERRUPT)) | 1026 | if (HAS_BSD(dev) && (iir & I915_BSD_USER_INTERRUPT)) |
@@ -1394,7 +1396,8 @@ void i915_hangcheck_elapsed(unsigned long data) | |||
1394 | 1396 | ||
1395 | out: | 1397 | out: |
1396 | /* Reset timer case chip hangs without another request being added */ | 1398 | /* Reset timer case chip hangs without another request being added */ |
1397 | mod_timer(&dev_priv->hangcheck_timer, jiffies + DRM_I915_HANGCHECK_PERIOD); | 1399 | mod_timer(&dev_priv->hangcheck_timer, |
1400 | jiffies + msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD)); | ||
1398 | } | 1401 | } |
1399 | 1402 | ||
1400 | /* drm_dma.h hooks | 1403 | /* drm_dma.h hooks |