On 19/05/16 12:32, Chris Wilson wrote:
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.

How much time do we take in the reset case - is it acceptable to do that work from the system wq?

Hm, why was it an ordered queue so far - we only queue single work on it?

Regards,

Tvrtko

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
  drivers/gpu/drm/i915/i915_dma.c | 8 --------
  drivers/gpu/drm/i915/i915_drv.h | 1 -
  drivers/gpu/drm/i915/i915_irq.c | 6 +++---
  3 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index a8c79f6512a4..aa312fd2bc10 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1026,15 +1026,8 @@ static int i915_workqueues_init(struct drm_i915_private 
*dev_priv)
        if (dev_priv->hotplug.dp_wq == NULL)
                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;

-out_free_dp_wq:
-       destroy_workqueue(dev_priv->hotplug.dp_wq);
  out_free_wq:
        destroy_workqueue(dev_priv->wq);
  out_err:
@@ -1045,7 +1038,6 @@ out_err:

  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->wq);
  }
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 72f0b02a8372..42b8038bf998 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1366,7 +1366,6 @@ struct i915_gpu_error {
        /* 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)

-       struct workqueue_struct *hangcheck_wq;
        struct delayed_work hangcheck_work;

        /* For reset and error_state handling. */
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 4818fcb5e960..984b575ba081 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -3262,7 +3262,7 @@ out:

  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)
                return;
@@ -3272,8 +3272,8 @@ void i915_queue_hangcheck(struct drm_i915_private 
*dev_priv)
         * we will ignore a hung ring if a second ring is kept busy.
         */

-       queue_delayed_work(e->hangcheck_wq, &e->hangcheck_work,
-                          
round_jiffies_up_relative(DRM_I915_HANGCHECK_JIFFIES));
+       delay = round_jiffies_up_relative(DRM_I915_HANGCHECK_JIFFIES);
+       schedule_delayed_work(&dev_priv->gpu_error.hangcheck_work, delay);
  }

  static void ibx_irq_reset(struct drm_device *dev)

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to