summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-04-07 11:25:51 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2017-04-07 13:37:41 +0100
commit5ad08be7e34fc6f3c6936ac40063ea839d4ce0d2 (patch)
tree82eddb09aba8346d0603a7f50c060b3231968296 /drivers/gpu/drm/i915/i915_gem.c
parente92075ff7dc54305bd5709a758ffe825aef35e8f (diff)
downloadop-kernel-dev-5ad08be7e34fc6f3c6936ac40063ea839d4ce0d2.zip
op-kernel-dev-5ad08be7e34fc6f3c6936ac40063ea839d4ce0d2.tar.gz
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>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 5cfe63e..9bc4d89 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4349,8 +4349,11 @@ static void __i915_gem_free_work(struct work_struct *work)
* 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);
+ if (need_resched())
+ break;
+ }
}
static void __i915_gem_free_object_rcu(struct rcu_head *head)
OpenPOWER on IntegriCloud