[Intel-gfx] [RFC 14/15] drm/i915: Use new IS_GEN range helpers

Ville Syrjälä ville.syrjala at linux.intel.com
Fri Feb 9 15:12:58 UTC 2018


On Fri, Feb 09, 2018 at 04:48:43PM +0200, Ville Syrjälä wrote:
> On Fri, Feb 09, 2018 at 01:18:49PM +0200, Jani Nikula wrote:
> > On Thu, 08 Feb 2018, Ville Syrjälä <ville.syrjala at linux.intel.com> wrote:
> > > On Thu, Feb 08, 2018 at 05:13:02PM +0200, Mika Kuoppala wrote:
> > >> Chris Wilson <chris at chris-wilson.co.uk> writes:
> > >> 
> > >> > Quoting Tvrtko Ursulin (2018-02-08 14:34:38)
> > >> >> 
> > >> >> On 08/02/2018 14:22, Ville Syrjälä wrote:
> > >> >> > On Thu, Feb 08, 2018 at 01:06:05PM +0000, Tvrtko Ursulin wrote:
> > >> >> >> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> > >> >> >>
> > >> >> >> Coccinelle transformation:
> > >> >> >>
> > >> >> >>   @@
> > >> >> >>   expression p, g;
> > >> >> >>   @@
> > >> >> >>   (
> > >> >> >>   -INTEL_GEN(p) > g
> > >> >> >>   +IS_GEN_GT(p, g)
> > >> >> > 
> > >> >> > I think this stuff makes the code pretty close to illegible.
> > >> >> > In this particular case even more so because "GT" actually
> > >> >> > means something very different to us.
> > >> >> 
> > >> >> Oh how true! And I did not realize it at all while writing it! :)
> > >> >> 
> > >> >> Anyway, something like this, regardless of a name, is needed if people 
> > >> >> want this to be effective. Since the checks have to be moved to known at 
> > >> >> compile time. Or a completely different approach will be needed.
> > >> >
> > >> > IS_GEN_RANGE() doesn't cut it?
> > >> >
> > >> 
> > >> IS_GEN_RANGE(8,9);
> > >> 
> > >> short and readable
> > >
> > > 'if (IS_GEN_RANGE(...))' reads funny. IS_GEN_IN_RANGE() would be more
> > > englishy perhaps, but it looks a bit off to me for whatever reason.
> > 
> > We already have IS_GEN(dev_priv, start, end) for inclusive ranges with
> > GEN_FOREVER as unbound start/end. There's no need to bikeshed the naming
> > further. (Except perhaps the GEN_FOREVER part.)
> > 
> > With some macro vararg hacking, we could probably make that work for
> > IS_GEN(dev_priv, exact) too, to replace say IS_GEN5() with one macro if
> > we like. Just to make more code use similar constructs.
> > 
> > > And it still doesn't tell you anything about inclusive vs. exlusive.
> > > So it just forces you to waste brain cells on mundane details when
> > > reading the code. IMO that's a fairly bad tradeoff.
> > 
> > Agreed. I think this patch is by far the worst part in the
> > series. Especially the _GT, _GTE, _LT, _LTE macros are IMO unacceptable.
> > 
> > Quick greping shows that we have much more inclusive than exclusive
> > range checks.
> 
> I think the usual pattern has been inclusive start, exclusive end. That
> can help you think in terms of "this is when the feature appeared, and
> this is when it disappeared". But if it's hidden in a macro then I
> think exclusive might end up being rather confusing.
> 
> > We could help our brains a bit by switching, uh,
> > exclusively to inclusive ranges. That's not perfect, by far, as some
> > checks naturally work better with < and >, but I think I'd rather have
> > that with IS_GEN() than a bunch of macros you have to stop to think
> > about.
> 
> If only the compiler would be smart and be able to see that something
> like
> 
> #define INTEL_GEN(dev_priv) (ilog2((dev_priv)->gen_mask & CONFIG_GEN_MASK))
> 
> if (INTEL_GEN(dev_priv) < 8)
> 	...
> 
> can never be true...
> 
> Not sure it can't actually. But I assume people have actually tried
> that.

Hmm...

#define IS_GEN(dev_priv, expr) ((ilog2(GEN_MASK) expr) && \
                                (ilog2((dev_priv)->gen_mask expr)))

if (IS_GEN(dev_priv, >= 8))
	...

Would something like that actually work?

-- 
Ville Syrjälä
Intel OTC


More information about the Intel-gfx mailing list