[Intel-gfx] [PATCH] drm/i915: Don't update the render-clock for every bo.
Eric Anholt
eric at anholt.net
Tue Dec 1 18:43:18 CET 2009
On Tue, 01 Dec 2009 14:11:21 +0000, Chris Wilson <chris at chris-wilson.co.uk> wrote:
> Excerpts from Eric Anholt's message of Tue Dec 01 00:33:05 +0000 2009:
> > On Mon, 30 Nov 2009 01:08:56 +0000, Chris Wilson <chris at chris-wilson.co.uk> wrote:
> > > Only update the render-clock on transition from busy to idle and vice
> > > versa, or else we burn a significant percentage of the cpu just rewriting
> > > the register -- not quite as power-friendly as intended ;-)
> > >
> > > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > > Cc: Jesse Barnes <jbarnes at virtuousgeek.org>
> >
> > Mostly looks good.
> >
> > With this change, though, there seems to be a race where the idle timer
> > could fire making busy = false, new work comes in and marks busy = true
> > (setting render clock), then the scheduled work for idling the GPU
> > happens and busy is untouched but the clocks get dropped. Any following
> > work would be done at low render clock, until busy = false happens again
> > and we get another chance to wake up.
>
> I think Jesse got it right in that scenario:
>
> mark busy -> busy=1, increase renderclock, schedule timer
> mark busy -> busy==1 then modify timer
> ...
> timeout -> busy=0, add idle task
> [mark busy -> busy=1, increase renderclock, schedule timer]
> idle handler -> busy==1 then skip
> -> busy==0 then decrease renderclock
>
> I may very well be mistaken though, I so frequently am.
> -ickle
Yeah, I missed the conditional in the idle handler, and it's all locked
so it looks safe. Applied. Thanks!
More information about the Intel-gfx
mailing list