From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v6] drm/i915: Emit to ringbuffer directly
Date: Thu, 09 Feb 2017 12:37:36 +0200 [thread overview]
Message-ID: <87vasjr6of.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <20170209091016.GI11545@nuc-i3427.alporthouse.com>
Chris Wilson <chris@chris-wilson.co.uk> writes:
> On Thu, Feb 09, 2017 at 10:00:35AM +0200, Joonas Lahtinen wrote:
>> On ke, 2017-02-08 at 18:04 +0000, Tvrtko Ursulin wrote:
>> > From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>> >
>> > This removes the usage of intel_ring_emit in favour of
>> > directly writing to the ring buffer.
>> >
>> > intel_ring_emit was preventing the compiler for optimising
>> > fetch and increment of the current ring buffer pointer and
>> > therefore generating very verbose code for every write.
>> >
>> > It had no useful purpose since all ringbuffer operations
>> > are started and ended with intel_ring_begin and
>> > intel_ring_advance respectively, with no bail out in the
>> > middle possible, so it is fine to increment the tail in
>> > intel_ring_begin and let the code manage the pointer
>> > itself.
>> >
>> > Useless instruction removal amounts to approximately
>> > two and half kilobytes of saved text on my build.
>> >
>> > Not sure if this has any measurable performance
>> > implications but executing a ton of useless instructions
>> > on fast paths cannot be good.
>> >
>> > Patch is not fully polished, but it compiles and runs
>> > on Gen9 at least.
>> >
>> > v2:
>> > * Change return from intel_ring_begin to error pointer by
>> > popular demand.
>> > * Move tail increment to intel_ring_advance to enable some
>> > error checking.
>> >
>> > v3:
>> > * Move tail advance back into intel_ring_begin.
>> > * Rebase and tidy.
>> >
>> > v4:
>> > * Complete rebase after a few months since v3.
>> >
>> > v5:
>> > * Remove unecessary cast and fix !debug compile. (Chris Wilson)
>> >
>> > v6:
>> > * Make intel_ring_offset take request as well.
>> > * Fix recording of request postfix plus a sprinkle of asserts.
>> > (Chris Wilson)
>> >
>> > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>> > Cc: Chris Wilson <chris@chris-wilson.co.uk>
>>
>> <SNIP>
>>
>> > @@ -617,99 +616,92 @@ mi_set_context(struct drm_i915_gem_request *req, u32 hw_flags)
>> > if (INTEL_GEN(dev_priv) >= 7)
>> > len += 2 + (num_rings ? 4*num_rings + 6 : 0);
>> >
>> > - ret = intel_ring_begin(req, len);
>> > - if (ret)
>> > - return ret;
>> > + out = intel_ring_begin(req, len);
>> > + if (IS_ERR(out))
>> > + return PTR_ERR(out);
>> >
>> > /* WaProgramMiArbOnOffAroundMiSetContext:ivb,vlv,hsw,bdw,chv */
>> > if (INTEL_GEN(dev_priv) >= 7) {
>> > - intel_ring_emit(ring, MI_ARB_ON_OFF | MI_ARB_DISABLE);
>> > + *out++ = MI_ARB_ON_OFF | MI_ARB_DISABLE;
>>
>> I expressed my concern in the previous iteration of this series months
>> ago, and here goes again; Lets try to keep the writes easily greppable.
>>
>> So intel_ring_emit (or better name) could remain as a wrapper
>>
>> #define (something something)_emit(x, y) *(x)++ = (y)
>
> My concern with intel_ring_emit() remaining is that we are no longer
> operating on the ring. The pointer to use for emitting is retrieved from
> the request, so I think pointer = i915_gem_request_emit(rq, num_dwords)
> is what we want in the near future.
>
> I suppose if that was
>
> ring = i915_gem_request_emit(rq, num_dwords);
> intel_ring_emit(ring, blah)
> intel_ring_advance(rq, ring); /* this still needs polish */
>
Going through request feels right. For ring_emit
we could use shorter:
cs_emit and cs_advance.
They are rings but for users at this level the distinction
feels unimportant.
Just my few bikesheds.
-Mika
> It'll just about do, problem being that intel_ring_foo() is not
> operating on an struct intel_ring. :|
>
> s/intel_ring_emit/ring_emit/ ?
> -Chris
>
> --
> Chris Wilson, Intel Open Source Technology Centre
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2017-02-09 10:38 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-08 13:10 [PATCH] drm/i915: Emit to ringbuffer directly Tvrtko Ursulin
2017-02-08 13:36 ` Chris Wilson
2017-02-08 13:58 ` Chris Wilson
2017-02-08 14:14 ` [PATCH v5] " Tvrtko Ursulin
2017-02-08 17:49 ` Chris Wilson
2017-02-08 18:04 ` [PATCH v6] " Tvrtko Ursulin
2017-02-08 18:21 ` Chris Wilson
2017-02-09 9:02 ` [PATCH v7] " Tvrtko Ursulin
2017-02-09 13:35 ` Chris Wilson
2017-02-13 12:53 ` [PATCH v8] " Tvrtko Ursulin
2017-02-13 13:06 ` [PATCH v9] " Tvrtko Ursulin
2017-02-13 21:09 ` Chris Wilson
2017-02-14 11:32 ` [PATCH v10] " Tvrtko Ursulin
2017-02-14 12:03 ` Joonas Lahtinen
2017-02-14 12:06 ` Chris Wilson
2017-02-09 8:00 ` [PATCH v6] " Joonas Lahtinen
2017-02-09 9:10 ` Chris Wilson
2017-02-09 10:37 ` Mika Kuoppala [this message]
2017-02-09 11:49 ` Tvrtko Ursulin
2017-02-09 13:29 ` Chris Wilson
2017-02-08 22:32 ` ✗ Fi.CI.BAT: failure for drm/i915: Emit to ringbuffer directly (rev7) Patchwork
2017-02-09 10:22 ` ✗ Fi.CI.BAT: failure for drm/i915: Emit to ringbuffer directly (rev8) Patchwork
2017-02-09 21:52 ` Patchwork
2017-02-10 8:22 ` ✗ Fi.CI.BAT: warning " Patchwork
2017-02-13 13:02 ` ✗ Fi.CI.BAT: failure for drm/i915: Emit to ringbuffer directly (rev9) Patchwork
2017-02-13 13:52 ` ✓ Fi.CI.BAT: success for drm/i915: Emit to ringbuffer directly (rev10) Patchwork
2017-02-14 13:52 ` ✓ Fi.CI.BAT: success for drm/i915: Emit to ringbuffer directly (rev11) Patchwork
2017-02-14 14:39 ` Tvrtko Ursulin
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=87vasjr6of.fsf@gaia.fi.intel.com \
--to=mika.kuoppala@linux.intel.com \
--cc=Intel-gfx@lists.freedesktop.org \
--cc=chris@chris-wilson.co.uk \
--cc=joonas.lahtinen@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.