Since removing dev->struct_mutex usage, we only use i915->wq for batch freeing of GEM objects and ppGTT, it is essential for memory reclaim. If we let the workqueue dawdle, we trap excess amounts of memory, so give it a priority boost. Although since we no longer depend on a singular mutex, we could run unbounded, but first lets try to keep some constraint upon the worker. Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> Cc: CQ Tang <cq.tang@xxxxxxxxx> --- drivers/gpu/drm/i915/i915_drv.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 8bb7e2dcfaaa..8c9198f0d2ad 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -219,20 +219,10 @@ intel_teardown_mchbar(struct drm_i915_private *dev_priv) static int i915_workqueues_init(struct drm_i915_private *dev_priv) { /* - * The i915 workqueue is primarily used for batched retirement of - * requests (and thus managing bo) once the task has been completed - * by the GPU. i915_retire_requests() is called directly when we - * need high-priority retirement, such as waiting for an explicit - * bo. - * - * It is also used for periodic low-priority events, such as - * idle-timers and recording error state. - * - * All tasks on the workqueue are expected to acquire the dev mutex - * so there is no point in running more than one instance of the - * workqueue at any time. Use an ordered one. + * The i915 workqueue is primarily used for batched freeing of + * GEM objects and ppGTT, and is essential for memory reclaim. */ - dev_priv->wq = alloc_ordered_workqueue("i915", 0); + dev_priv->wq = alloc_ordered_workqueue("i915", WQ_HIGHPRI); if (dev_priv->wq == NULL) goto out_err; -- 2.20.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx