drm/i915: introduce i915_queue_hangcheck
To run hangcheck in near future. Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
e852096986
commit
10cd45b6e8
@ -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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 */
|
||||||
mod_timer(&dev_priv->gpu_error.hangcheck_timer,
|
i915_queue_hangcheck(dev);
|
||||||
round_jiffies_up(jiffies +
|
}
|
||||||
DRM_I915_HANGCHECK_JIFFIES));
|
|
||||||
|
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,
|
||||||
|
round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ibx_irq_preinstall(struct drm_device *dev)
|
static void ibx_irq_preinstall(struct drm_device *dev)
|
||||||
|
Loading…
Reference in New Issue
Block a user