drm/i915: Stop spinning for DROP_IDLE (debugfs/i915_drop_caches)
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 7 May 2019 12:11:08 +0000 (13:11 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 7 May 2019 16:40:19 +0000 (17:40 +0100)
If the user is racing a call to debugfs/i915_drop_caches with ongoing
submission from another thread/process, we may never end up idling the
GPU and be uninterruptibly spinning in debugfs/i915_drop_caches trying
to catch an idle moment.

Just flush the work once, that should be enough to park the system under
correct conditions. Outside of those we either have a driver bug or the
user is racing themselves. Sadly, because the user may be provoking the
unwanted situation we can't put a warn here to attract attention to a
probable bug.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190507121108.18377-4-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_debugfs.c

index fc6e60d82477ee74174295f0792623c1f3d5cc2b..b6094063be9b3037a3612c72d476a9ad6e4f465c 100644 (file)
@@ -3947,9 +3947,7 @@ i915_drop_caches_set(void *data, u64 val)
        fs_reclaim_release(GFP_KERNEL);
 
        if (val & DROP_IDLE) {
-               do {
-                       flush_delayed_work(&i915->gem.retire_work);
-               } while (READ_ONCE(i915->gt.awake));
+               flush_delayed_work(&i915->gem.retire_work);
                flush_work(&i915->gem.idle_work);
        }