Commit 77740025 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Remove the dedicated hangcheck workqueue

The queue only ever contains at most one item and has no special flags.
It is just a very simple wrapper around the system-wq - a complication
with no benefits.

v2: Use the system_long_wq as we may wish to capture the error state
after detecting the hang - which may take a bit of time.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1467390209-3576-3-git-send-email-chris@chris-wilson.co.uk
parent 05535726
...@@ -1175,15 +1175,8 @@ static int i915_workqueues_init(struct drm_i915_private *dev_priv) ...@@ -1175,15 +1175,8 @@ static int i915_workqueues_init(struct drm_i915_private *dev_priv)
if (dev_priv->hotplug.dp_wq == NULL) if (dev_priv->hotplug.dp_wq == NULL)
goto out_free_wq; goto out_free_wq;
dev_priv->gpu_error.hangcheck_wq =
alloc_ordered_workqueue("i915-hangcheck", 0);
if (dev_priv->gpu_error.hangcheck_wq == NULL)
goto out_free_dp_wq;
return 0; return 0;
out_free_dp_wq:
destroy_workqueue(dev_priv->hotplug.dp_wq);
out_free_wq: out_free_wq:
destroy_workqueue(dev_priv->wq); destroy_workqueue(dev_priv->wq);
out_err: out_err:
...@@ -1194,7 +1187,6 @@ static int i915_workqueues_init(struct drm_i915_private *dev_priv) ...@@ -1194,7 +1187,6 @@ static int i915_workqueues_init(struct drm_i915_private *dev_priv)
static void i915_workqueues_cleanup(struct drm_i915_private *dev_priv) static void i915_workqueues_cleanup(struct drm_i915_private *dev_priv)
{ {
destroy_workqueue(dev_priv->gpu_error.hangcheck_wq);
destroy_workqueue(dev_priv->hotplug.dp_wq); destroy_workqueue(dev_priv->hotplug.dp_wq);
destroy_workqueue(dev_priv->wq); destroy_workqueue(dev_priv->wq);
} }
......
...@@ -1374,7 +1374,6 @@ struct i915_gpu_error { ...@@ -1374,7 +1374,6 @@ struct i915_gpu_error {
/* Hang gpu twice in this window and your context gets banned */ /* Hang gpu twice in this window and your context gets banned */
#define DRM_I915_CTX_BAN_PERIOD DIV_ROUND_UP(8*DRM_I915_HANGCHECK_PERIOD, 1000) #define DRM_I915_CTX_BAN_PERIOD DIV_ROUND_UP(8*DRM_I915_HANGCHECK_PERIOD, 1000)
struct workqueue_struct *hangcheck_wq;
struct delayed_work hangcheck_work; struct delayed_work hangcheck_work;
/* For reset and error_state handling. */ /* For reset and error_state handling. */
......
...@@ -3249,7 +3249,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work) ...@@ -3249,7 +3249,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work)
void i915_queue_hangcheck(struct drm_i915_private *dev_priv) void i915_queue_hangcheck(struct drm_i915_private *dev_priv)
{ {
struct i915_gpu_error *e = &dev_priv->gpu_error; unsigned long delay;
if (!i915.enable_hangcheck) if (!i915.enable_hangcheck)
return; return;
...@@ -3259,8 +3259,9 @@ void i915_queue_hangcheck(struct drm_i915_private *dev_priv) ...@@ -3259,8 +3259,9 @@ void i915_queue_hangcheck(struct drm_i915_private *dev_priv)
* we will ignore a hung ring if a second ring is kept busy. * we will ignore a hung ring if a second ring is kept busy.
*/ */
queue_delayed_work(e->hangcheck_wq, &e->hangcheck_work, delay = round_jiffies_up_relative(DRM_I915_HANGCHECK_JIFFIES);
round_jiffies_up_relative(DRM_I915_HANGCHECK_JIFFIES)); queue_delayed_work(system_long_wq,
&dev_priv->gpu_error.hangcheck_work, delay);
} }
static void ibx_irq_reset(struct drm_device *dev) static void ibx_irq_reset(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