When running on a Cherryview, or on a Broxton with VTD enabled, pinning of
a VMA to GGTT is now committed asynchronously to avoid lock inversion
among reservation_ww and cpu_hotplug locks, the latter acquired from
stop_machine().  That may defer further processing of resources that
depend on that VMA.  As a consequence, a 10ms delay in a multithreaded
migrate test case may occur too short and still incomplete threads may be
interrupted, and the test case may fail with -ERESTARTSYS or -EINTR error
code returned by any of those threads.

Extend the delay to empirically determined 100ms on affected platforms.

v2: Fix spelling (Sebastian, Krzysztof),
  - explain why VMA pinning is commited asynchronously on CHV/BXT+VTD
    (Krzysztof),
  - use more precise wording in commit description.

Cc: Krzysztof Karas <[email protected]>
Reviewed-by: Sebastian Brzezinka <[email protected]>
Signed-off-by: Janusz Krzysztofik <[email protected]>
---
 drivers/gpu/drm/i915/gt/selftest_migrate.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gt/selftest_migrate.c 
b/drivers/gpu/drm/i915/gt/selftest_migrate.c
index 54bc447efce0b..cde755751a0ba 100644
--- a/drivers/gpu/drm/i915/gt/selftest_migrate.c
+++ b/drivers/gpu/drm/i915/gt/selftest_migrate.c
@@ -710,7 +710,8 @@ static int threaded_migrate(struct intel_migrate *migrate,
                thread[i].tsk = tsk;
        }
 
-       msleep(10 * n_cpus); /* start all threads before we kthread_stop() */
+       /* start all threads before we kthread_stop() */
+       msleep((intel_vm_no_concurrent_access_wa(migrate->context->vm->i915) ? 
100 : 10) * n_cpus);
 
        for (i = 0; i < n_cpus; ++i) {
                struct task_struct *tsk = thread[i].tsk;
-- 
2.51.0

Reply via email to