Commit 10cd45b6 authored by Mika Kuoppala's avatar Mika Kuoppala Committed by Daniel Vetter

drm/i915: introduce i915_queue_hangcheck

To run hangcheck in near future.
Signed-off-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
Reviewed-by: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent e8520969
...@@ -1622,6 +1622,7 @@ extern void i915_update_gfx_val(struct drm_i915_private *dev_priv); ...@@ -1622,6 +1622,7 @@ extern void i915_update_gfx_val(struct drm_i915_private *dev_priv);
extern void intel_console_resume(struct work_struct *work); extern void intel_console_resume(struct work_struct *work);
/* i915_irq.c */ /* i915_irq.c */
void i915_queue_hangcheck(struct drm_device *dev);
void i915_hangcheck_elapsed(unsigned long data); void i915_hangcheck_elapsed(unsigned long data);
void i915_handle_error(struct drm_device *dev, bool wedged); void i915_handle_error(struct drm_device *dev, bool wedged);
......
...@@ -2083,10 +2083,8 @@ int __i915_add_request(struct intel_ring_buffer *ring, ...@@ -2083,10 +2083,8 @@ int __i915_add_request(struct intel_ring_buffer *ring,
ring->outstanding_lazy_request = 0; ring->outstanding_lazy_request = 0;
if (!dev_priv->ums.mm_suspended) { if (!dev_priv->ums.mm_suspended) {
if (i915_enable_hangcheck) { i915_queue_hangcheck(ring->dev);
mod_timer(&dev_priv->gpu_error.hangcheck_timer,
round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
}
if (was_empty) { if (was_empty) {
queue_delayed_work(dev_priv->wq, queue_delayed_work(dev_priv->wq,
&dev_priv->mm.retire_work, &dev_priv->mm.retire_work,
......
...@@ -698,18 +698,13 @@ static void ironlake_rps_change_irq_handler(struct drm_device *dev) ...@@ -698,18 +698,13 @@ static void ironlake_rps_change_irq_handler(struct drm_device *dev)
static void notify_ring(struct drm_device *dev, static void notify_ring(struct drm_device *dev,
struct intel_ring_buffer *ring) struct intel_ring_buffer *ring)
{ {
struct drm_i915_private *dev_priv = dev->dev_private;
if (ring->obj == NULL) if (ring->obj == NULL)
return; return;
trace_i915_gem_request_complete(ring, ring->get_seqno(ring, false)); trace_i915_gem_request_complete(ring, ring->get_seqno(ring, false));
wake_up_all(&ring->irq_queue); wake_up_all(&ring->irq_queue);
if (i915_enable_hangcheck) { i915_queue_hangcheck(dev);
mod_timer(&dev_priv->gpu_error.hangcheck_timer,
round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
}
} }
static void gen6_pm_rps_work(struct work_struct *work) static void gen6_pm_rps_work(struct work_struct *work)
...@@ -2030,9 +2025,17 @@ void i915_hangcheck_elapsed(unsigned long data) ...@@ -2030,9 +2025,17 @@ void i915_hangcheck_elapsed(unsigned long data)
if (busy_count) if (busy_count)
/* Reset timer case chip hangs without another request /* Reset timer case chip hangs without another request
* being added */ * being added */
i915_queue_hangcheck(dev);
}
void i915_queue_hangcheck(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
if (!i915_enable_hangcheck)
return;
mod_timer(&dev_priv->gpu_error.hangcheck_timer, mod_timer(&dev_priv->gpu_error.hangcheck_timer,
round_jiffies_up(jiffies + round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
DRM_I915_HANGCHECK_JIFFIES));
} }
static void ibx_irq_preinstall(struct drm_device *dev) static void ibx_irq_preinstall(struct drm_device *dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment