public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Dave Gordon <david.s.gordon@intel.com>
To: Jani Nikula <jani.nikula@linux.intel.com>,
	Chris Wilson <chris@chris-wilson.co.uk>,
	intel-gfx@lists.freedesktop.org
Subject: Re: Polymorphic to_i915()
Date: Mon, 18 Apr 2016 12:11:07 +0100	[thread overview]
Message-ID: <5714C0CB.8030401@intel.com> (raw)
In-Reply-To: <87r3e3p95s.fsf@intel.com>

On 18/04/16 10:18, Jani Nikula wrote:
> On Fri, 15 Apr 2016, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>> Final canvas for opinions for using a magic macro to reduce typing in
>> the common operation of getting our drm_i915_private from the object.
>>
>> 	21 files changed, 333 insertions(+), 392 deletions(-)
>>
>> Not to mention the ease it makes for later patches to reduce the pointer
>> dance.
>
> I've expressed my reservations about this the last time.
>
> My compromise proposal is this: let's add the to_i915()
> "superconvenience macro", but let's not embed that into other
> macros. Instead, move away from convenience macros in them, explicitly
> requiring dev_priv.
>
> This would make just one macro special, and would keep the rest less
> surprising and "C-like". We already need dev_priv all over the place, so
> I don't think having a local variable or an explicit to_i915() is a big
> burden.
>
> BR,
> Jani.

I'm quite happy with the first patch of this series (various renames), 
but not so keen on the second (pass anything to for_each_engine(). The 
reason for this is that the dev_priv parameter to this macro is used 
repeatedly in the resulting loop, so the caller should be encouraged to 
supply as an actual parameter the expression that needs the least 
evaluation on each iteration i.e. a local variable. Allowing such things 
as to_i915(dev) or, worse, to_i915(engine) may encourage uses which end 
up generating four levels of memory indirection :(
e.g. engine->dev->dev_priv->engine(!)

So I think it should be regarded as better (more efficient) style to write

	struct drm_i915_private *i915 = to_i915(...);
	...
	for_each_engine(engine, i915) {
		...
	}

rather than

	for_each_engine(engine, to_i915(...)) {
		...
	}

OTOH I have no objection to

	if (USES_FULL_PPGTT(to_i915(obj)) ...

(not a loop) but I'm not so keen on

	if (USES_FULL_PPGTT(obj))

as this suggests that it's a property of the object, and different 
objects might therefore return different values.

The GuC changes are OK, and we might as well convert "dev_priv" to 
"i915" at the same time, if that's now the preferred name.

In the end, I think I agree with Jani: let's have a thoroughly 
polymorphic to_i915() that works on anything, and then have everything 
else require that.

Regards,
.Dave.
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2016-04-18 11:11 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-15 17:45 Polymorphic to_i915() Chris Wilson
2016-04-15 17:46 ` [PATCH 1/6] drm/i915: Rename the magic polymorphic macro __I915__ Chris Wilson
2016-04-20 14:27   ` Dave Gordon
2016-04-15 17:46 ` [PATCH 2/6] drm/i915: Allow passing any known pointer to for_each_engine() Chris Wilson
2016-04-15 17:46 ` [PATCH 3/6] drm/i915: Extend magic to_i915() to work with drm_i915_gem_object Chris Wilson
2016-04-15 17:46 ` [PATCH 4/6] drm/i915: Use to_i915() instead of guc_to_i915() Chris Wilson
2016-04-15 17:46 ` [PATCH 5/6] drm/i915: Teach to_i915() how to extract drm_i915_private from requests Chris Wilson
2016-04-15 17:46 ` [PATCH 6/6] drm/i915: Teach to_i915() how to extract drm_i915_private from engines Chris Wilson
2016-04-18  9:18 ` Polymorphic to_i915() Jani Nikula
2016-04-18 11:11   ` Dave Gordon [this message]
2016-04-18 11:49     ` Jani Nikula
2016-04-18 12:09       ` Chris Wilson
2016-04-20 12:57   ` Daniel Vetter
2016-04-20 14:29     ` Dave Gordon
2016-04-20 15:26     ` Mika Kuoppala

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5714C0CB.8030401@intel.com \
    --to=david.s.gordon@intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox