[PATCH] drm: Defer disabling the vblank IRQ until the next interrupt (for instant-off)

Chris Wilson chris at chris-wilson.co.uk
Fri Apr 3 02:06:39 PDT 2015


On Fri, Apr 03, 2015 at 11:20:20AM +0900, Michel Dänzer wrote:
> On 02.04.2015 20:34, Chris Wilson wrote:
> > On vblank instant-off systems, we can get into a situation where the cost
> > of enabling and disabling the vblank IRQ around a drmWaitVblank query
> > dominates. However, we know that if the user wants the current vblank
> > counter, they are also very likely to immediately queue a vblank wait
> > and so we can keep the interrupt around and only turn it off if we have
> > no further vblank requests in the interrupt interval.
> > 
> > After vblank event delivery there is a shadow of one vblank where the
> > interrupt is kept alive for the user to query and queue another vblank
> > event. Similarly, if the user is using blocking drmWaitVblanks, the
> > interrupt will be disabled on the IRQ following the wait completion.
> > However, if the user is simply querying the current vblank counter and
> > timestamp, the interrupt will be disabled after every IRQ and the user
> > will enabled it again on the first query following the IRQ.
> 
> As I mentioned before, it might not be too hard to make querying the
> current counter work without enabling the interrupt. But this looks like
> a step in the right direction.

I honestly chickened out in case I broke something!

Hindsight says both are useful as currently with instant-off we will
disable the vblank interrupt inside the IRQ handler delivering the
event, whereas we can save quite a bit of pain by waiting for the next
IRQ before doing the disable (culmulatively saving a lot more CPU cycles
over the course of swap chain than the extra IRQ will cost).
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the dri-devel mailing list