From: Tvrtko Ursulin <tvrtko.ursu...@intel.com>

We can avoid open-coding the schedule wake-up since

   commit 9cff8adeaa34b5d2802f03f89803da57856b3b72
   Author: NeilBrown <ne...@suse.de>
   Date:   Fri Feb 13 15:49:17 2015 +1100

       sched: Prevent recursion in io_schedule()

exported the io_schedule_timeout function which we can now use
to simplify the code in __i915_wait_request.

v2: New commit message. (Daniel Vetter)

Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
Cc: Chris Wilson <ch...@chris-wilson.co.uk>
Reviewed-by: Daniel Vetter <daniel.vet...@ffwll.ch>
---
 drivers/gpu/drm/i915/i915_gem.c | 28 ++++++++--------------------
 1 file changed, 8 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 6c60e04fc09c..de98dc41fb9f 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1135,11 +1135,6 @@ i915_gem_check_wedge(struct i915_gpu_error *error,
        return 0;
 }
 
-static void fake_irq(unsigned long data)
-{
-       wake_up_process((struct task_struct *)data);
-}
-
 static bool missed_irq(struct drm_i915_private *dev_priv,
                       struct intel_engine_cs *ring)
 {
@@ -1291,7 +1286,7 @@ int __i915_wait_request(struct drm_i915_gem_request *req,
        }
 
        for (;;) {
-               struct timer_list timer;
+               long sched_timeout;
 
                prepare_to_wait(&ring->irq_queue, &wait, state);
 
@@ -1321,21 +1316,14 @@ int __i915_wait_request(struct drm_i915_gem_request 
*req,
                        break;
                }
 
-               timer.function = NULL;
-               if (timeout || missed_irq(dev_priv, ring)) {
-                       unsigned long expire;
-
-                       setup_timer_on_stack(&timer, fake_irq, (unsigned 
long)current);
-                       expire = missed_irq(dev_priv, ring) ? jiffies + 1 : 
timeout_expire;
-                       mod_timer(&timer, expire);
-               }
-
-               io_schedule();
+               if (timeout)
+                       sched_timeout = timeout_expire - jiffies;
+               else if (missed_irq(dev_priv, ring))
+                       sched_timeout = 1;
+               else
+                       sched_timeout = MAX_SCHEDULE_TIMEOUT;
 
-               if (timer.function) {
-                       del_singleshot_timer_sync(&timer);
-                       destroy_timer_on_stack(&timer);
-               }
+               io_schedule_timeout(sched_timeout);
        }
        if (!irq_test_in_progress)
                ring->irq_put(ring);
-- 
1.9.1

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

Reply via email to