[Intel-gfx] [PATCH 17/46] drm/i915: Syntatic sugar for using intel_runtime_pm

Chris Wilson chris at chris-wilson.co.uk
Thu Jan 10 09:59:20 UTC 2019


Quoting John Harrison (2019-01-10 01:10:09)
> On 1/9/2019 16:24, John Harrison wrote:
> > On 1/7/2019 03:54, Chris Wilson wrote:
> >> Frequently, we use intel_runtime_pm_get/_put around a small block.
> >> Formalise that usage by providing a macro to define such a block with an
> >> automatic closure to scope the intel_runtime_pm wakeref to that block,
> >> i.e. macro abuse smelling of python.
> >>
> >> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> >> Cc: Jani Nikula <jani.nikula at intel.com>
> >> ---
> >>   +#define with_intel_runtime_pm(i915, wf) \
> >> +    for (wf = intel_runtime_pm_get(i915); wf; \
> >> +         intel_runtime_pm_put(i915, wf), wf = 0)
> >> +
> >> +#define with_intel_runtime_pm_if_in_use(i915, wf) \
> >> +    for (wf = intel_runtime_pm_get_if_in_use(i915); wf; \
> >> +         intel_runtime_pm_put(i915, wf), wf = 0)
> >> +
> > This is a potential change in behaviour. Previously the simple 'get' 
> > version would unconditionally execute the wrapped code. Whereas now, 
> > if the get function fails for some reason and returns zero, the 
> > wrapped code will be skipped. Currently, the get() function can't 
> > return zero - it returns -1 in the case of the tracking code failing 
> > to allocate or similar. But is that guaranteed to be the case 
> > forevermore? It would be a better match for the original behaviour if 
> > the 'for' loop of the 'get' version was unconditional and only the 
> > 'get_if_in_use' version could skip. E.g. something like:
> >    for (intel_wakeref_t loop = -1, wf = intel_runtime_pm_get(i915) ; 
> > loop; intel_runtime_pm_put(i915, wf), wf = loop = 0)
> >
> > Although that does mean the wf becomes local to the loop. On the other 
> > hand, I'm also not sure why it needs to be external anyway? If it is 
> > guaranteed to be zero on exit and any value on entry is overwritten, 
> > then why have it external at all? Would it not be neater/smaller 
> > source to get rid of all the local instantiations?
> >
> > John.
> >
> Doh. Not sure why I was thinking C99 extensions were valid in the 
> kernel. I can't think of an alternative way to fix the above issues 
> without making the macro truly hideous. So maybe it's not enough of a 
> worry to worry about.

Using C99 would be a nice improvement for a lot of our macros, and I
hope it comes to pass.

Yes, the whole reason we return -1 on tracking-failure-but-rpm-success
is so that we keep 0 as meaning rpm-failure so that the different cases
are identifiable required for the markup and cookie tracking. So using
-1 here just falls out of the general case.
-Chris


More information about the Intel-gfx mailing list