Commit 64b95df9 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Assume exclusive access to objects inside resume

Inside gtt_restore_mappings() we currently take the obj->resv->lock, but
in the future we need to avoid taking this fs-reclaim tainted lock as we
need to extend the coverage of the vm->mutex. Take advantage of the
single-threaded nature of the early resume phase, and do a single
wbinvd() to flush all the GTT objects en masse.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190819200705.3631-1-chris@chris-wilson.co.uk
parent cc337560
...@@ -3274,6 +3274,7 @@ void i915_ggtt_disable_guc(struct i915_ggtt *ggtt) ...@@ -3274,6 +3274,7 @@ void i915_ggtt_disable_guc(struct i915_ggtt *ggtt)
static void ggtt_restore_mappings(struct i915_ggtt *ggtt) static void ggtt_restore_mappings(struct i915_ggtt *ggtt)
{ {
struct i915_vma *vma, *vn; struct i915_vma *vma, *vn;
bool flush = false;
intel_gt_check_and_clear_faults(ggtt->vm.gt); intel_gt_check_and_clear_faults(ggtt->vm.gt);
...@@ -3298,10 +3299,9 @@ static void ggtt_restore_mappings(struct i915_ggtt *ggtt) ...@@ -3298,10 +3299,9 @@ static void ggtt_restore_mappings(struct i915_ggtt *ggtt)
WARN_ON(i915_vma_bind(vma, WARN_ON(i915_vma_bind(vma,
obj ? obj->cache_level : 0, obj ? obj->cache_level : 0,
PIN_UPDATE)); PIN_UPDATE));
if (obj) { if (obj) { /* only used during resume => exclusive access */
i915_gem_object_lock(obj); flush |= fetch_and_zero(&obj->write_domain);
WARN_ON(i915_gem_object_set_to_gtt_domain(obj, false)); obj->read_domains |= I915_GEM_DOMAIN_GTT;
i915_gem_object_unlock(obj);
} }
lock: lock:
...@@ -3312,6 +3312,9 @@ static void ggtt_restore_mappings(struct i915_ggtt *ggtt) ...@@ -3312,6 +3312,9 @@ static void ggtt_restore_mappings(struct i915_ggtt *ggtt)
ggtt->invalidate(ggtt); ggtt->invalidate(ggtt);
mutex_unlock(&ggtt->vm.mutex); mutex_unlock(&ggtt->vm.mutex);
if (flush)
wbinvd_on_all_cpus();
} }
void i915_gem_restore_gtt_mappings(struct drm_i915_private *i915) void i915_gem_restore_gtt_mappings(struct drm_i915_private *i915)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment