提交 5ad08be7 编写于 作者: C Chris Wilson

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: NAndrea Arcangeli <aarcange@redhat.com>
Signed-off-by: NChris 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.ukReviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
上级 e92075ff
...@@ -4349,8 +4349,11 @@ static void __i915_gem_free_work(struct work_struct *work) ...@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册