[Intel-gfx] [PATCH] drm/i915: Use usleep_range() in wait_for()
Chris Wilson
chris at chris-wilson.co.uk
Fri Mar 20 14:09:51 PDT 2015
On Fri, Mar 20, 2015 at 09:28:08PM +0200, ville.syrjala at linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> msleep() can sleep for way too long, so switch wait_for() to use
> usleep_range() instead. Following a totally unscientific method
> I just picked the range as W-2W.
>
> This cuts the i915 init time on my BSW to almost half:
> - initcall i915_init+0x0/0xa8 [i915] returned 0 after 419977 usecs
> + initcall i915_init+0x0/0xa8 [i915] returned 0 after 238419 usecs
>
> Note that I didn't perform any other benchmarks on this so far.
>
> Cc: Jesse Barnes <jbarnes at virtuousgeek.org>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
Hmm, I think we can improve further with a more variable sleep. The
maximum we pass to wait_for() is usually plucked from somewhere in the
spec (or is just a safety factor). Either way, it is a good guide as to
how to actually sleep for - if say we try to only sample 1000 times up
to the maximum:
if (do_sleep && drm_can_sleep()) {
usleep_range((MS), 10*(MS));
}
So whilst you have a situation where we clearly sleep too long between
sampling (a register), it would be beneficial to start adding some debug
infrastructure. Or even better if usleep_range already does it for us...
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list