mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-19 23:06:11 +07:00
drm/i915: Break long iterations for get/put shmemfs pages
As we may have to iterate a few thousand elements to acquire and release the shmemfs backing storage for a GPU object, we need to break up the long loop with cond_resched() to retain a modicum of low latency for other processes. Testcase: igt/benchmarks/gem_syslatency Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Kuo-Hsin Yang <vovoy@chromium.org> Cc: Matthew Auld <matthew.auld@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181105170640.26905-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
bfe60a0272
commit
e6db7f4d7c
@ -2404,6 +2404,7 @@ i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj,
|
||||
mark_page_accessed(page);
|
||||
|
||||
put_page(page);
|
||||
cond_resched();
|
||||
}
|
||||
obj->mm.dirty = false;
|
||||
|
||||
@ -2574,6 +2575,7 @@ static int i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
|
||||
gfp_t gfp = noreclaim;
|
||||
|
||||
do {
|
||||
cond_resched();
|
||||
page = shmem_read_mapping_page_gfp(mapping, i, gfp);
|
||||
if (likely(!IS_ERR(page)))
|
||||
break;
|
||||
@ -2584,7 +2586,6 @@ static int i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
|
||||
}
|
||||
|
||||
i915_gem_shrink(dev_priv, 2 * page_count, NULL, *s++);
|
||||
cond_resched();
|
||||
|
||||
/*
|
||||
* We've tried hard to allocate the memory by reaping
|
||||
|
Loading…
Reference in New Issue
Block a user