Now that we can pass arbitrary commands into the base __wait_for()
macro, we can reimplement the open-coded wait-for inside
i915_gem_idle_work_handler() using the macro. This means that instead of
using ktime, we now use jiffies, and benefit from the exponential sleep
backoff that allows a fast response if the HW settles quickly.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuopp...@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
Cc: Joonas Lahtinen <joonas.lahti...@linux.intel.com>

---
Note this depends on __wait_for() from the hdcp topic branch.
---
 drivers/gpu/drm/i915/i915_gem.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 7f0684ccc724..cb4df1be0909 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3347,7 +3347,6 @@ i915_gem_idle_work_handler(struct work_struct *work)
        struct drm_i915_private *dev_priv =
                container_of(work, typeof(*dev_priv), gt.idle_work.work);
        bool rearm_hangcheck;
-       ktime_t end;
 
        if (!READ_ONCE(dev_priv->gt.awake))
                return;
@@ -3356,16 +3355,10 @@ i915_gem_idle_work_handler(struct work_struct *work)
         * Wait for last execlists context complete, but bail out in case a
         * new request is submitted.
         */
-       end = ktime_add_ms(ktime_get(), I915_IDLE_ENGINES_TIMEOUT);
-       do {
-               if (new_requests_since_last_retire(dev_priv))
-                       return;
-
-               if (intel_engines_are_idle(dev_priv))
-                       break;
-
-               usleep_range(100, 500);
-       } while (ktime_before(ktime_get(), end));
+       __wait_for(if (new_requests_since_last_retire(dev_priv)) return,
+                  intel_engines_are_idle(dev_priv),
+                  I915_IDLE_ENGINES_TIMEOUT * 1000,
+                  10,  1000);
 
        rearm_hangcheck =
                cancel_delayed_work_sync(&dev_priv->gpu_error.hangcheck_work);
-- 
2.15.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to