From: CQ Tang <cq.tang@xxxxxxxxx> We posted blitter copying operation. Then we call i915_gem_object_set_to_cpu_domain(), inside this function, we call i915_gem_object_wait() with interruptible flag. Sometimes this wait call gets interrupted by the blitter copying complete interrupt. This will make migration operation to fail. So before calling i915_gem_object_set_to_cpu_domain(), we call i915_gem_object_wait() with non-interruptible flag to wait for the blitter operation to finish. Signed-off-by: CQ Tang <cq.tang@xxxxxxxxx> Cc: Matthew Auld <matthew.auld@xxxxxxxxx> Cc: Sudeep Dutt <sudeep.dutt@xxxxxxxxx> Cc: Ramalingam C <ramalingam.c@xxxxxxxxx> --- drivers/gpu/drm/i915/gem/i915_gem_object.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c index 7ff430503497..49935245a4a8 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c @@ -381,6 +381,17 @@ int i915_gem_object_migrate(struct drm_i915_gem_object *obj, err = i915_gem_object_ww_copy_blt(obj, donor, ww, ce); if (err) goto unlock_donor; + + /* + * Occasionally i915_gem_object_wait() called inside + * i915_gem_object_set_to_cpu_domain() get interrupted + * and return -ERESTARTSYS, this will make migration + * operation fail. So adding a non-interruptible wait + * before changing the object domain. + */ + err = i915_gem_object_wait(donor, 0, MAX_SCHEDULE_TIMEOUT); + if (err) + goto unlock_donor; } err = i915_gem_object_set_to_cpu_domain(donor, false); -- 2.26.2 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx