浏览代码

drm/i915: Break up long runs of freeing objects

Before freeing the next batch of objects from the worker, check if the
worker's timeslice has expired and if so, defer the next batch to the
next invocation of the worker.

Suggested-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170407102552.5781-3-chris@chris-wilson.co.uk
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Chris Wilson 8 年之前
父节点
当前提交
5ad08be7e3
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      drivers/gpu/drm/i915/i915_gem.c

+ 4 - 1
drivers/gpu/drm/i915/i915_gem.c

@@ -4349,8 +4349,11 @@ static void __i915_gem_free_work(struct work_struct *work)
 	 * unbound now.
 	 * unbound now.
 	 */
 	 */
 
 
-	while ((freed = llist_del_all(&i915->mm.free_list)))
+	while ((freed = llist_del_all(&i915->mm.free_list))) {
 		__i915_gem_free_objects(i915, freed);
 		__i915_gem_free_objects(i915, freed);
+		if (need_resched())
+			break;
+	}
 }
 }
 
 
 static void __i915_gem_free_object_rcu(struct rcu_head *head)
 static void __i915_gem_free_object_rcu(struct rcu_head *head)