Not all HW is made equal, and so one timeout for a test on one may fail
on another. Now that we measure a baseline for the latency of an engine,
we can provide a more precise estimate for how long a test will run and
after applying some safety factors, provide an accurate timeout for the
test.

Signed-off-by: Chris Wilson <[email protected]>
Cc: Tvrtko Ursulin <[email protected]>
Cc: Stuart Summers <[email protected]>
---
 drivers/gpu/drm/i915/Makefile                 |  3 +-
 .../drm/i915/gem/selftests/i915_gem_context.c |  7 +--
 drivers/gpu/drm/i915/gt/intel_workarounds.c   |  3 +-
 drivers/gpu/drm/i915/gt/selftest_context.c    |  3 +-
 drivers/gpu/drm/i915/gt/selftest_engine_cs.c  |  5 ++-
 drivers/gpu/drm/i915/gt/selftest_hangcheck.c  |  7 +--
 drivers/gpu/drm/i915/gt/selftest_lrc.c        | 41 ++++++++---------
 drivers/gpu/drm/i915/gt/selftest_mocs.c       |  3 +-
 drivers/gpu/drm/i915/gt/selftest_timeline.c   |  5 ++-
 .../gpu/drm/i915/gt/selftest_workarounds.c    |  2 +-
 drivers/gpu/drm/i915/selftests/i915_gem_gtt.c |  3 +-
 drivers/gpu/drm/i915/selftests/i915_request.c | 10 ++---
 drivers/gpu/drm/i915/selftests/igt_utils.c    | 44 +++++++++++++++++++
 drivers/gpu/drm/i915/selftests/igt_utils.h    | 20 +++++++++
 14 files changed, 115 insertions(+), 41 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/selftests/igt_utils.c
 create mode 100644 drivers/gpu/drm/i915/selftests/igt_utils.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 7b83a510babb..faef8c1666d4 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -262,7 +262,8 @@ i915-$(CONFIG_DRM_I915_SELFTEST) += \
        selftests/igt_live_test.o \
        selftests/igt_mmap.o \
        selftests/igt_reset.o \
-       selftests/igt_spinner.o
+       selftests/igt_spinner.o \
+       selftests/igt_utils.o
 
 # virtual gpu code
 i915-y += i915_vgpu.o
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c 
b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
index 106a3bfa3bb6..b41568477426 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
@@ -18,6 +18,7 @@
 #include "selftests/igt_live_test.h"
 #include "selftests/igt_reset.h"
 #include "selftests/igt_spinner.h"
+#include "selftests/igt_utils.h"
 #include "selftests/mock_drm.h"
 #include "selftests/mock_gem_device.h"
 
@@ -86,7 +87,7 @@ static int live_nop_switch(void *arg)
                        }
                        i915_request_add(rq);
                }
-               if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+               if (igt_request_wait(rq, 0, 2) < 0) {
                        pr_err("Failed to populated %d contexts\n", nctx);
                        intel_gt_set_wedged(&i915->gt);
                        err = -EIO;
@@ -129,7 +130,7 @@ static int live_nop_switch(void *arg)
 
                                i915_request_add(rq);
                        }
-                       if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+                       if (igt_request_wait(rq, 0, 2) < 0) {
                                pr_err("Switching between %ld contexts timed 
out\n",
                                       prime);
                                intel_gt_set_wedged(&i915->gt);
@@ -193,7 +194,7 @@ static int __live_parallel_switch1(void *data)
 
                        i915_request_add(rq);
                }
-               if (i915_request_wait(rq, 0, HZ / 5) < 0)
+               if (igt_request_wait(rq, 0, 2) < 0)
                        err = -ETIME;
                i915_request_put(rq);
                if (err)
diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c 
b/drivers/gpu/drm/i915/gt/intel_workarounds.c
index 399acae2f33f..9ba588e113e5 100644
--- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
@@ -9,6 +9,7 @@
 #include "intel_gt.h"
 #include "intel_ring.h"
 #include "intel_workarounds.h"
+#include "selftests/igt_utils.h"
 
 /**
  * DOC: Hardware workarounds
@@ -1593,7 +1594,7 @@ static int engine_wa_list_verify(struct intel_context *ce,
                goto err_vma;
 
        i915_request_add(rq);
-       if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+       if (igt_request_wait(rq, 0, 2) < 0) {
                err = -ETIME;
                goto err_vma;
        }
diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c 
b/drivers/gpu/drm/i915/gt/selftest_context.c
index 57e40db8cbd2..65d033fd6bf8 100644
--- a/drivers/gpu/drm/i915/gt/selftest_context.c
+++ b/drivers/gpu/drm/i915/gt/selftest_context.c
@@ -11,6 +11,7 @@
 
 #include "gem/selftests/mock_context.h"
 #include "selftests/igt_flush_test.h"
+#include "selftests/igt_utils.h"
 #include "selftests/mock_drm.h"
 
 static int request_sync(struct i915_request *rq)
@@ -26,7 +27,7 @@ static int request_sync(struct i915_request *rq)
        __i915_request_commit(rq);
        __i915_request_queue(rq, NULL);
 
-       timeout = i915_request_wait(rq, 0, HZ / 10);
+       timeout = igt_request_wait(rq, 0, 1);
        if (timeout < 0)
                err = timeout;
        else
diff --git a/drivers/gpu/drm/i915/gt/selftest_engine_cs.c 
b/drivers/gpu/drm/i915/gt/selftest_engine_cs.c
index 5981a7b71ec9..e0de46509a88 100644
--- a/drivers/gpu/drm/i915/gt/selftest_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/selftest_engine_cs.c
@@ -11,6 +11,7 @@
 
 #include "i915_selftest.h"
 #include "selftests/igt_flush_test.h"
+#include "selftests/igt_utils.h"
 
 #define COUNT 5
 
@@ -171,7 +172,7 @@ static int perf_mi_bb_start(void *arg)
                        i915_request_get(rq);
                        i915_request_add(rq);
 
-                       if (i915_request_wait(rq, 0, HZ / 5) < 0)
+                       if (igt_request_wait(rq, 0, 2) < 0)
                                err = -EIO;
                        i915_request_put(rq);
                        if (err)
@@ -315,7 +316,7 @@ static int perf_mi_noop(void *arg)
                        i915_request_get(rq);
                        i915_request_add(rq);
 
-                       if (i915_request_wait(rq, 0, HZ / 5) < 0)
+                       if (igt_request_wait(rq, 0, 2) < 0)
                                err = -EIO;
                        i915_request_put(rq);
                        if (err)
diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c 
b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
index ff2d8af282a6..1ae25a668e19 100644
--- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
+++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
@@ -33,6 +33,7 @@
 #include "selftests/igt_flush_test.h"
 #include "selftests/igt_reset.h"
 #include "selftests/igt_atomic.h"
+#include "selftests/igt_utils.h"
 
 #include "selftests/mock_drm.h"
 
@@ -655,7 +656,7 @@ static int active_request_put(struct i915_request *rq)
        if (!rq)
                return 0;
 
-       if (i915_request_wait(rq, 0, 5 * HZ) < 0) {
+       if (igt_request_wait(rq, 0, 500) < 0) {
                GEM_TRACE("%s timed out waiting for completion of fence 
%llx:%lld\n",
                          rq->engine->name,
                          rq->fence.context,
@@ -845,7 +846,7 @@ static int __igt_reset_engines(struct intel_gt *gt,
                        count++;
 
                        if (rq) {
-                               if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+                               if (igt_request_wait(rq, 0, 2) < 0) {
                                        struct drm_printer p =
                                                
drm_info_printer(gt->i915->drm.dev);
 
@@ -1038,7 +1039,7 @@ static int igt_reset_wait(void *arg)
 
        reset_count = fake_hangcheck(gt, ALL_ENGINES);
 
-       timeout = i915_request_wait(rq, 0, 10);
+       timeout = igt_request_wait(rq, 0, 1);
        if (timeout < 0) {
                pr_err("i915_request_wait failed on a stuck request: err=%ld\n",
                       timeout);
diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c 
b/drivers/gpu/drm/i915/gt/selftest_lrc.c
index 2a1b5a2e0ec5..60597bb7bf18 100644
--- a/drivers/gpu/drm/i915/gt/selftest_lrc.c
+++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c
@@ -14,6 +14,7 @@
 #include "selftests/i915_random.h"
 #include "selftests/igt_flush_test.h"
 #include "selftests/igt_live_test.h"
+#include "selftests/igt_utils.h"
 #include "selftests/igt_spinner.h"
 #include "selftests/lib_sw_fence.h"
 
@@ -751,7 +752,7 @@ static int live_busywait_preempt(void *arg)
                }
 
                /* Low priority request should be busywaiting now */
-               if (i915_request_wait(lo, 0, 1) != -ETIME) {
+               if (igt_request_wait(lo, 0, 0) != -ETIME) {
                        pr_err("%s: Busywaiting request did not!\n",
                               engine->name);
                        err = -EIO;
@@ -779,7 +780,7 @@ static int live_busywait_preempt(void *arg)
                intel_ring_advance(hi, cs);
                i915_request_add(hi);
 
-               if (i915_request_wait(lo, 0, HZ / 5) < 0) {
+               if (igt_request_wait(lo, 0, 2) < 0) {
                        struct drm_printer p = 
drm_info_printer(gt->i915->drm.dev);
 
                        pr_err("%s: Failed to preempt semaphore busywait!\n",
@@ -1201,7 +1202,7 @@ static int __cancel_active0(struct live_preempt_cancel 
*arg)
        if (err)
                goto out;
 
-       if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+       if (igt_request_wait(rq, 0, 2) < 0) {
                err = -EIO;
                goto out;
        }
@@ -1266,7 +1267,7 @@ static int __cancel_active1(struct live_preempt_cancel 
*arg)
                goto out;
 
        igt_spinner_end(&arg->a.spin);
-       if (i915_request_wait(rq[1], 0, HZ / 5) < 0) {
+       if (igt_request_wait(rq[1], 0, 2) < 0) {
                err = -EIO;
                goto out;
        }
@@ -1349,7 +1350,7 @@ static int __cancel_queued(struct live_preempt_cancel 
*arg)
        if (err)
                goto out;
 
-       if (i915_request_wait(rq[2], 0, HZ / 5) < 0) {
+       if (igt_request_wait(rq[2], 0, 2) < 0) {
                err = -EIO;
                goto out;
        }
@@ -1410,7 +1411,7 @@ static int __cancel_hostile(struct live_preempt_cancel 
*arg)
        if (err)
                goto out;
 
-       if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+       if (igt_request_wait(rq, 0, 2) < 0) {
                err = -EIO;
                goto out;
        }
@@ -1727,9 +1728,9 @@ static int live_suppress_wait_preempt(void *arg)
                        }
                        GEM_BUG_ON(!i915_request_started(rq[0]));
 
-                       if (i915_request_wait(rq[depth],
-                                             I915_WAIT_PRIORITY,
-                                             1) != -ETIME) {
+                       if (igt_request_wait(rq[depth],
+                                            I915_WAIT_PRIORITY,
+                                            0) != -ETIME) {
                                pr_err("%s: Waiter depth:%d completed!\n",
                                       engine->name, depth);
                                goto err_wedged;
@@ -1820,7 +1821,7 @@ static int live_chain_preempt(void *arg)
                         __func__, engine->name, ring_size);
 
                igt_spinner_end(&lo.spin);
-               if (i915_request_wait(rq, 0, HZ / 2) < 0) {
+               if (igt_request_wait(rq, 0, 5) < 0) {
                        pr_err("Timed out waiting to flush %s\n", engine->name);
                        goto err_wedged;
                }
@@ -1861,7 +1862,7 @@ static int live_chain_preempt(void *arg)
                        engine->schedule(rq, &attr);
 
                        igt_spinner_end(&hi.spin);
-                       if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+                       if (igt_request_wait(rq, 0, 2) < 0) {
                                struct drm_printer p =
                                        drm_info_printer(gt->i915->drm.dev);
 
@@ -1877,7 +1878,7 @@ static int live_chain_preempt(void *arg)
                        if (IS_ERR(rq))
                                goto err_wedged;
                        i915_request_add(rq);
-                       if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+                       if (igt_request_wait(rq, 0, 2) < 0) {
                                struct drm_printer p =
                                        drm_info_printer(gt->i915->drm.dev);
 
@@ -2080,7 +2081,7 @@ static int live_preempt_gang(void *arg)
                        struct i915_request *n =
                                list_next_entry(rq, client_link);
 
-                       if (err == 0 && i915_request_wait(rq, 0, HZ / 5) < 0) {
+                       if (err == 0 && igt_request_wait(rq, 0, 2) < 0) {
                                struct drm_printer p =
                                        drm_info_printer(engine->i915->drm.dev);
 
@@ -2294,7 +2295,7 @@ static int live_preempt_timeout(void *arg)
                intel_engine_flush_submission(engine);
                engine->props.preempt_timeout_ms = saved_timeout;
 
-               if (i915_request_wait(rq, 0, HZ / 10) < 0) {
+               if (igt_request_wait(rq, 0, 1) < 0) {
                        intel_gt_set_wedged(gt);
                        i915_request_put(rq);
                        err = -ETIME;
@@ -2642,7 +2643,7 @@ static int nop_virtual_engine(struct intel_gt *gt,
                }
 
                for (nc = 0; nc < nctx; nc++) {
-                       if (i915_request_wait(request[nc], 0, HZ / 10) < 0) {
+                       if (igt_request_wait(request[nc], 0, 1) < 0) {
                                pr_err("%s(%s): wait for %llx:%lld timed out\n",
                                       __func__, ve[0]->engine->name,
                                       request[nc]->fence.context,
@@ -2779,7 +2780,7 @@ static int mask_virtual_engine(struct intel_gt *gt,
        }
 
        for (n = 0; n < nsibling; n++) {
-               if (i915_request_wait(request[n], 0, HZ / 10) < 0) {
+               if (igt_request_wait(request[n], 0, 1) < 0) {
                        pr_err("%s(%s): wait for %llx:%lld timed out\n",
                               __func__, ve->engine->name,
                               request[n]->fence.context,
@@ -2918,7 +2919,7 @@ static int preserved_virtual_engine(struct intel_gt *gt,
                i915_request_add(rq);
        }
 
-       if (i915_request_wait(last, 0, HZ / 5) < 0) {
+       if (igt_request_wait(last, 0, 2) < 0) {
                err = -ETIME;
                goto out_end;
        }
@@ -3081,7 +3082,7 @@ static int bond_virtual_engine(struct intel_gt *gt,
                }
                onstack_fence_fini(&fence);
 
-               if (i915_request_wait(rq[0], 0, HZ / 10) < 0) {
+               if (igt_request_wait(rq[0], 0, 1) < 0) {
                        pr_err("Master request did not execute (on %s)!\n",
                               rq[0]->engine->name);
                        err = -EIO;
@@ -3480,7 +3481,7 @@ static int __live_lrc_state(struct intel_engine_cs 
*engine,
        intel_engine_flush_submission(engine);
        expected[RING_TAIL_IDX] = ce->ring->tail;
 
-       if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+       if (igt_request_wait(rq, 0, 2) < 0) {
                err = -ETIME;
                goto err_rq;
        }
@@ -3613,7 +3614,7 @@ static int __live_gpr_clear(struct intel_engine_cs 
*engine,
        i915_request_get(rq);
        i915_request_add(rq);
 
-       if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+       if (igt_request_wait(rq, 0, 2) < 0) {
                err = -ETIME;
                goto err_rq;
        }
diff --git a/drivers/gpu/drm/i915/gt/selftest_mocs.c 
b/drivers/gpu/drm/i915/gt/selftest_mocs.c
index 80cb3cbaad77..4deee6fd034f 100644
--- a/drivers/gpu/drm/i915/gt/selftest_mocs.c
+++ b/drivers/gpu/drm/i915/gt/selftest_mocs.c
@@ -10,6 +10,7 @@
 #include "gem/selftests/mock_context.h"
 #include "selftests/igt_reset.h"
 #include "selftests/igt_spinner.h"
+#include "selftests/igt_utils.h"
 
 struct live_mocs {
        struct drm_i915_mocs_table table;
@@ -21,7 +22,7 @@ static int request_add_sync(struct i915_request *rq, int err)
 {
        i915_request_get(rq);
        i915_request_add(rq);
-       if (i915_request_wait(rq, 0, HZ / 5) < 0)
+       if (igt_request_wait(rq, 0, 2) < 0)
                err = -ETIME;
        i915_request_put(rq);
 
diff --git a/drivers/gpu/drm/i915/gt/selftest_timeline.c 
b/drivers/gpu/drm/i915/gt/selftest_timeline.c
index f04a59fe5d2c..b2f5fa98f9d1 100644
--- a/drivers/gpu/drm/i915/gt/selftest_timeline.c
+++ b/drivers/gpu/drm/i915/gt/selftest_timeline.c
@@ -17,6 +17,7 @@
 #include "../selftests/igt_flush_test.h"
 #include "../selftests/mock_gem_device.h"
 #include "selftests/mock_timeline.h"
+#include "selftests/igt_utils.h"
 
 static struct page *hwsp_page(struct intel_timeline *tl)
 {
@@ -725,7 +726,7 @@ static int live_hwsp_wrap(void *arg)
 
                i915_request_add(rq);
 
-               if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+               if (igt_request_wait(rq, 0, 2) < 0) {
                        pr_err("Wait for timeline writes timed out!\n");
                        err = -EIO;
                        goto out;
@@ -792,7 +793,7 @@ static int live_hwsp_recycle(void *arg)
                                break;
                        }
 
-                       if (i915_request_wait(rq, 0, HZ / 5) < 0) {
+                       if (igt_request_wait(rq, 0, 2) < 0) {
                                pr_err("Wait for timeline writes timed out!\n");
                                i915_request_put(rq);
                                intel_timeline_put(tl);
diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c 
b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
index ac1921854cbf..7d50ddd5e53b 100644
--- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
+++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
@@ -37,7 +37,7 @@ static int request_add_sync(struct i915_request *rq, int err)
 {
        i915_request_get(rq);
        i915_request_add(rq);
-       if (i915_request_wait(rq, 0, HZ / 5) < 0)
+       if (igt_request_wait(rq, 0, 2) < 0)
                err = -EIO;
        i915_request_put(rq);
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
index d94db487c4dd..a5f97c0c7fe0 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
@@ -35,6 +35,7 @@
 #include "mock_drm.h"
 #include "mock_gem_device.h"
 #include "igt_flush_test.h"
+#include "igt_utils.h"
 
 static void cleanup_freed_objects(struct drm_i915_private *i915)
 {
@@ -1732,7 +1733,7 @@ static int context_sync(struct intel_context *ce)
        i915_request_get(rq);
        i915_request_add(rq);
 
-       timeout = i915_request_wait(rq, 0, HZ / 5);
+       timeout = igt_request_wait(rq, 0, 2);
        i915_request_put(rq);
 
        return timeout < 0 ? -EIO : 0;
diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c 
b/drivers/gpu/drm/i915/selftests/i915_request.c
index d29f44cf3162..6ec8af565bb2 100644
--- a/drivers/gpu/drm/i915/selftests/i915_request.c
+++ b/drivers/gpu/drm/i915/selftests/i915_request.c
@@ -33,6 +33,7 @@
 #include "i915_selftest.h"
 #include "igt_live_test.h"
 #include "igt_spinner.h"
+#include "igt_utils.h"
 #include "lib_sw_fence.h"
 
 #include "mock_drm.h"
@@ -68,9 +69,9 @@ static int igt_add_request(void *arg)
 
 static int igt_wait_request(void *arg)
 {
-       const long T = HZ / 4;
        struct drm_i915_private *i915 = arg;
        struct i915_request *request;
+       const unsigned long T = igt_request_timeout(i915->gt.engine[RCS0], 2);
        int err = -EINVAL;
 
        /* Submit a request, then wait upon it */
@@ -231,8 +232,7 @@ static int igt_request_rewind(void *arg)
        request->engine->submit_request(request);
        rcu_read_unlock();
 
-
-       if (i915_request_wait(vip, 0, HZ) == -ETIME) {
+       if (igt_request_wait(vip, 0, 10) == -ETIME) {
                pr_err("timed out waiting for high priority request\n");
                goto err;
        }
@@ -1078,7 +1078,7 @@ static int __live_parallel_engine1(void *arg)
                i915_request_add(rq);
 
                err = 0;
-               if (i915_request_wait(rq, 0, HZ / 5) < 0)
+               if (igt_request_wait(rq, 0, 2) < 0)
                        err = -ETIME;
                i915_request_put(rq);
                if (err)
@@ -1176,7 +1176,7 @@ static int __live_parallel_spin(void *arg)
        }
        igt_spinner_end(&spin);
 
-       if (err == 0 && i915_request_wait(rq, 0, HZ / 5) < 0)
+       if (err == 0 && igt_request_wait(rq, 0, 2) < 0)
                err = -EIO;
        i915_request_put(rq);
 
diff --git a/drivers/gpu/drm/i915/selftests/igt_utils.c 
b/drivers/gpu/drm/i915/selftests/igt_utils.c
new file mode 100644
index 000000000000..faf68a649da6
--- /dev/null
+++ b/drivers/gpu/drm/i915/selftests/igt_utils.c
@@ -0,0 +1,44 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright © 2019 Intel Corporation
+ */
+
+#include <linux/jiffies.h>
+#include <linux/log2.h>
+
+#include "gt/intel_engine.h"
+#include "i915_drv.h" /* for_each_engine_masked() */
+#include "i915_request.h"
+#include "igt_utils.h"
+
+unsigned long igt_request_timeout(struct intel_engine_cs *engine,
+                                 unsigned int factor)
+{
+       unsigned long base;
+
+       if (is_power_of_2(engine->mask)) {
+               base = ewma_delay_read(&engine->delay);
+       } else {
+               intel_engine_mask_t mask = engine->mask, tmp;
+               unsigned int n = 0;
+
+               base = 0;
+               for_each_engine_masked(engine, engine->gt, mask, tmp)
+                       base += ewma_delay_read(&engine->delay), n++;
+               base /= n;
+       }
+
+       if (factor)
+               base *= factor * 10;
+
+       return usecs_to_jiffies(base) + 1;
+}
+
+int igt_request_wait(struct i915_request *rq,
+                    unsigned int flags,
+                    unsigned int factor)
+{
+       return i915_request_wait(rq, flags,
+                                igt_request_timeout(rq->engine, factor));
+}
diff --git a/drivers/gpu/drm/i915/selftests/igt_utils.h 
b/drivers/gpu/drm/i915/selftests/igt_utils.h
new file mode 100644
index 000000000000..b92fd1b511de
--- /dev/null
+++ b/drivers/gpu/drm/i915/selftests/igt_utils.h
@@ -0,0 +1,20 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright © 2019 Intel Corporation
+ */
+
+#ifndef __I915_SELFTESTS_IGT_UTILS_H__
+#define __I915_SELFTESTS_IGT_UTILS_H__
+
+struct intel_engine_cs;
+struct i915_request;
+
+unsigned long igt_request_timeout(struct intel_engine_cs *engine,
+                                 unsigned int factor);
+
+int igt_request_wait(struct i915_request *rq,
+                    unsigned int flags,
+                    unsigned int factor);
+
+#endif /* __I915_SELFTESTS_IGT_UTILS_H__ */
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to