Message ID | 1452521321-4032-6-git-send-email-tvrtko.ursulin@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Jan 11, 2016 at 02:08:39PM +0000, Tvrtko Ursulin wrote: > From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > > We can avoid open-coding the schedule wake-up since > > commit 9cff8adeaa34b5d2802f03f89803da57856b3b72 > Author: NeilBrown <neilb@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.ursulin@intel.com> > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> I don't like this because the timer concept still turns out to be useful when we separate the timer from the bottom-half. And so we have a patch to remove it and then we add it back again because it serves a purpose. -Chris
On 11/01/16 14:33, Chris Wilson wrote: > On Mon, Jan 11, 2016 at 02:08:39PM +0000, Tvrtko Ursulin wrote: >> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> >> >> We can avoid open-coding the schedule wake-up since >> >> commit 9cff8adeaa34b5d2802f03f89803da57856b3b72 >> Author: NeilBrown <neilb@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.ursulin@intel.com> >> Cc: Chris Wilson <chris@chris-wilson.co.uk> >> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > > I don't like this because the timer concept still turns out to be useful > when we separate the timer from the bottom-half. And so we have a patch > to remove it and then we add it back again because it serves a purpose. -EWHATEVER Regards, Tvrtko
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);