* [PATCH] drm/i915: Don't need a timer to wake us up
@ 2015-11-26 17:15 Tvrtko Ursulin
2015-11-26 17:55 ` Chris Wilson
0 siblings, 1 reply; 5+ messages in thread
From: Tvrtko Ursulin @ 2015-11-26 17:15 UTC (permalink / raw)
To: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Looks like the sleeping loop in __i915_wait_request can be
simplified by using io_schedule_timeout instead of setting
up and destroying a timer.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
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 33adc8f8ab20..efb3eb8b4a5e 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)
{
@@ -1231,7 +1226,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,
interruptible ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
@@ -1262,21 +1257,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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] drm/i915: Don't need a timer to wake us up
2015-11-26 17:15 [PATCH] drm/i915: Don't need a timer to wake us up Tvrtko Ursulin
@ 2015-11-26 17:55 ` Chris Wilson
2015-11-26 18:24 ` Chris Wilson
0 siblings, 1 reply; 5+ messages in thread
From: Chris Wilson @ 2015-11-26 17:55 UTC (permalink / raw)
To: Tvrtko Ursulin; +Cc: Intel-gfx
On Thu, Nov 26, 2015 at 05:15:46PM +0000, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Looks like the sleeping loop in __i915_wait_request can be
> simplified by using io_schedule_timeout instead of setting
> up and destroying a timer.
Simplified by duplicating code? I liked the explicit handling for its
obviousness and simplicity.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drm/i915: Don't need a timer to wake us up
2015-11-26 17:55 ` Chris Wilson
@ 2015-11-26 18:24 ` Chris Wilson
2015-11-27 9:35 ` Tvrtko Ursulin
0 siblings, 1 reply; 5+ messages in thread
From: Chris Wilson @ 2015-11-26 18:24 UTC (permalink / raw)
To: Tvrtko Ursulin, Intel-gfx, Tvrtko Ursulin
On Thu, Nov 26, 2015 at 05:55:39PM +0000, Chris Wilson wrote:
> On Thu, Nov 26, 2015 at 05:15:46PM +0000, Tvrtko Ursulin wrote:
> > From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> >
> > Looks like the sleeping loop in __i915_wait_request can be
> > simplified by using io_schedule_timeout instead of setting
> > up and destroying a timer.
>
> Simplified by duplicating code? I liked the explicit handling for its
> obviousness and simplicity.
To be slightl more gracious, after we eliminate the irq handling from
this function, the waiter does look like this, albeit I still think it
is cleaner to keep the timeout handling distinct from the indefinite
waits.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drm/i915: Don't need a timer to wake us up
2015-11-26 18:24 ` Chris Wilson
@ 2015-11-27 9:35 ` Tvrtko Ursulin
2015-11-27 9:47 ` Chris Wilson
0 siblings, 1 reply; 5+ messages in thread
From: Tvrtko Ursulin @ 2015-11-27 9:35 UTC (permalink / raw)
To: Chris Wilson, Intel-gfx, Tvrtko Ursulin
On 26/11/15 18:24, Chris Wilson wrote:
> On Thu, Nov 26, 2015 at 05:55:39PM +0000, Chris Wilson wrote:
>> On Thu, Nov 26, 2015 at 05:15:46PM +0000, Tvrtko Ursulin wrote:
>>> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>>
>>> Looks like the sleeping loop in __i915_wait_request can be
>>> simplified by using io_schedule_timeout instead of setting
>>> up and destroying a timer.
>>
>> Simplified by duplicating code? I liked the explicit handling for its
>> obviousness and simplicity.
> To be slightl more gracious, after we eliminate the irq handling from
> this function, the waiter does look like this, albeit I still think it
> is cleaner to keep the timeout handling distinct from the indefinite
> waits.
Duplicating code, fake_irq obviousness and simplicity?!?
To start with:
drivers/gpu/drm/i915/i915_gem.c | 28 ++++++++--------------------
1 file changed, 8 insertions(+), 20 deletions(-)
So less code, less binary text, less stack space, less kernel API usage
so also fewer cycles to execute (not that it matters here but hey), and
easier to understand logic.
So really I don't know what you don't like about it.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drm/i915: Don't need a timer to wake us up
2015-11-27 9:35 ` Tvrtko Ursulin
@ 2015-11-27 9:47 ` Chris Wilson
0 siblings, 0 replies; 5+ messages in thread
From: Chris Wilson @ 2015-11-27 9:47 UTC (permalink / raw)
To: Tvrtko Ursulin; +Cc: Intel-gfx
On Fri, Nov 27, 2015 at 09:35:16AM +0000, Tvrtko Ursulin wrote:
>
> On 26/11/15 18:24, Chris Wilson wrote:
> >On Thu, Nov 26, 2015 at 05:55:39PM +0000, Chris Wilson wrote:
> >>On Thu, Nov 26, 2015 at 05:15:46PM +0000, Tvrtko Ursulin wrote:
> >>>From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> >>>
> >>>Looks like the sleeping loop in __i915_wait_request can be
> >>>simplified by using io_schedule_timeout instead of setting
> >>>up and destroying a timer.
> >>
> >>Simplified by duplicating code? I liked the explicit handling for its
> >>obviousness and simplicity.
> >To be slightl more gracious, after we eliminate the irq handling from
> >this function, the waiter does look like this, albeit I still think it
> >is cleaner to keep the timeout handling distinct from the indefinite
> >waits.
>
> Duplicating code, fake_irq obviousness and simplicity?!?
Bah, the code was duplicated in Feb 2015. fake_irq is obvious and a
precise description of what we are doing and why, that's why I like it.
It is much easier to convert to other wakeups (say hrtimer, or napi
style). This code needs to be changed to solve the thundering herd
problem, if you want to improve this code, keep reviewing the
prequisites.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-11-27 9:47 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-26 17:15 [PATCH] drm/i915: Don't need a timer to wake us up Tvrtko Ursulin
2015-11-26 17:55 ` Chris Wilson
2015-11-26 18:24 ` Chris Wilson
2015-11-27 9:35 ` Tvrtko Ursulin
2015-11-27 9:47 ` Chris Wilson
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.