Message ID | 1464970133-29859-4-git-send-email-chris@chris-wilson.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 03/06/16 17:08, 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. > > 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: Chris Wilson <chris@chris-wilson.co.uk> > --- > drivers/gpu/drm/i915/i915_drv.c | 8 -------- > drivers/gpu/drm/i915/i915_drv.h | 1 - > drivers/gpu/drm/i915/i915_irq.c | 7 ++++--- > 3 files changed, 4 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index 2f8b2545e3de..3c8c75c77574 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -1143,15 +1143,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: > @@ -1162,7 +1155,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 be533de7383b..9471ebc99624 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -1365,7 +1365,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 1303d7c034d3..a09310701999 100644 > --- a/drivers/gpu/drm/i915/i915_irq.c > +++ b/drivers/gpu/drm/i915/i915_irq.c > @@ -3248,7 +3248,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; > @@ -3258,8 +3258,9 @@ 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); > + queue_delayed_work(system_long_wq, > + &dev_priv->gpu_error.hangcheck_work, delay); > } > > static void ibx_irq_reset(struct drm_device *dev) > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Regards, Tvrtko
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 2f8b2545e3de..3c8c75c77574 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -1143,15 +1143,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: @@ -1162,7 +1155,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 be533de7383b..9471ebc99624 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1365,7 +1365,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 1303d7c034d3..a09310701999 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -3248,7 +3248,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; @@ -3258,8 +3258,9 @@ 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); + queue_delayed_work(system_long_wq, + &dev_priv->gpu_error.hangcheck_work, delay); } static void ibx_irq_reset(struct drm_device *dev)
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: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/i915_drv.c | 8 -------- drivers/gpu/drm/i915/i915_drv.h | 1 - drivers/gpu/drm/i915/i915_irq.c | 7 ++++--- 3 files changed, 4 insertions(+), 12 deletions(-)