From: Ben Widawsky <ben@bwidawsk.net>
To: "Mateo Lozano, Oscar" <oscar.mateo@intel.com>
Cc: "intel-gfx@lists.freedesktop.org" <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 26/53] drm/i915/bdw: New logical ring submission mechanism
Date: Mon, 23 Jun 2014 17:23:48 -0700 [thread overview]
Message-ID: <20140624002347.GA31605@bwidawsk.net> (raw)
In-Reply-To: <92648605EABDA246B775AAB04C95A7A3137BEE76@IRSMSX103.ger.corp.intel.com>
On Mon, Jun 23, 2014 at 02:35:38PM +0000, Mateo Lozano, Oscar wrote:
> > -----Original Message-----
> > From: Chris Wilson [mailto:chris@chris-wilson.co.uk]
> > Sent: Monday, June 23, 2014 2:42 PM
> > To: Mateo Lozano, Oscar
> > Cc: Volkin, Bradley D; intel-gfx@lists.freedesktop.org
> > Subject: Re: [Intel-gfx] [PATCH 26/53] drm/i915/bdw: New logical ring
> > submission mechanism
> >
> > On Mon, Jun 23, 2014 at 01:36:07PM +0000, Mateo Lozano, Oscar wrote:
> > > > -----Original Message-----
> > > > From: Chris Wilson [mailto:chris@chris-wilson.co.uk]
> > > > Sent: Monday, June 23, 2014 2:27 PM
> > > > To: Mateo Lozano, Oscar
> > > > Cc: Volkin, Bradley D; intel-gfx@lists.freedesktop.org
> > > > Subject: Re: [Intel-gfx] [PATCH 26/53] drm/i915/bdw: New logical
> > > > ring submission mechanism
> > > >
> > > > On Mon, Jun 23, 2014 at 01:18:35PM +0000, Mateo Lozano, Oscar
> > wrote:
> > > > > > -----Original Message-----
> > > > > > From: Chris Wilson [mailto:chris@chris-wilson.co.uk]
> > > > > > Sent: Monday, June 23, 2014 2:14 PM
> > > > > > To: Mateo Lozano, Oscar
> > > > > > Cc: Volkin, Bradley D; intel-gfx@lists.freedesktop.org
> > > > > > Subject: Re: [Intel-gfx] [PATCH 26/53] drm/i915/bdw: New logical
> > > > > > ring submission mechanism
> > > > > >
> > > > > > On Mon, Jun 23, 2014 at 01:09:37PM +0000, Mateo Lozano, Oscar
> > > > wrote:
> > > > > > > So far, yes, but that´s only because I artificially made
> > > > > > > intel_lrc.c self-
> > > > > > contained, as Daniel requested. What if we need to execute
> > > > > > commands from somewhere else, like in intel_gen7_queue_flip()?
> > > > > > >
> > > > > > > And this takes me to another discussion: this logical ring vs
> > > > > > > legacy ring split
> > > > > > is probably a good idea (time will tell), but we should provide
> > > > > > a way of sending commands for execution without knowing if
> > > > > > Execlists are enabled or not. In the early series that was easy
> > > > > > because we reused the ring_begin, ring_emit & ring_advance
> > > > > > functions, but this is not the case anymore. And without this,
> > > > > > sooner or later somebody will break legacy or execlists (this
> > > > > > already happened last week, when somebody here was implementing
> > > > > > native sync without knowing
> > > > about Execlists).
> > > > > > >
> > > > > > > So, the questions is: how do you feel about a dev_priv.gt
> > > > > > > vfunc that takes a
> > > > > > context, a ring, an array of DWORDS and a BB length and does the
> > > > > > intel_(logical)_ring_begin/emit/advance based on
> > i915.enable_execlists?
> > > > > >
> > > > > > I'm still baffled by the design. intel_ring_begin() and friends
> > > > > > should be able to find their context (logical or legacy) from
> > > > > > the ring and
> > > > dtrt.
> > > > > > -Chris
> > > > >
> > > > > Sorry, Chris, I obviously don´t have the same experience with 915 you
> > have:
> > > > how do you propose to extract the right context from the ring?
> > > >
> > > > The rings are a set of buffers and vfuncs that are associated with a
> > context.
> > > > Before you can call intel_ring_begin() you must know what context
> > > > you want to operate on and therefore can pick the right
> > > > logical/legacy ring and interface for RCS/BCS/VCS/etc -Chris
> > >
> > > Ok, but then you need to pass some extra stuff down together with the
> > intel_engine_cs, either intel_context or intel_ringbuffer, right? Because
> > that´s exactly what I did in previous versions, plumbing intel_context
> > everywhere where it was needed (I could have plumbed intel_ringbuffer
> > instead, it really doesn´t matter). This was rejected for being too intrusive
> > and not allowing easy maintenance in the future.
> >
> > Nope. You didn't redesign the ringbuffers to function as we expected but
> > tacked on extra information and layering violations.
> > -Chris
>
> I know is no excuse, but as I said, I don´t know the code as well as you do. Let me explain to you the history of this one and maybe you can help me out discovering where I got it all wrong:
>
> - The original design I inherited from Ben and Jesse created a completely new "struct intel_ring_buffer" per context, and passed that one on instead of passing one of the &dev_priv->ring[i] ones. When it was time to submit a context to the ELSP, they simply took it from ring->context. The problem with that was that creating an unbound number of "struct intel_ring_buffer" meant there were also an unbound number of things like "struct list_head active_list" or "u32 irq_enable_mask", which made little sense.
> - What we really needed, I naively thought, is to get rid of the concept of ring: there are no rings, there are engines (like the render engine, the vebox, etc...) and there are ringbuffers (as in circular buffer with a head offset, tail offset, and control information). So I went on and renamed the old "intel_ring_buffer" to "intel_engine_cs", then extracting a few things into a new "intel_ringbuffer" struct. Pre-Execlists, there was a 1:1 relationship between the ringbuffers and the engines. With Execlists, however, this 1:1 relationship is between the ringbuffers and the contexts.
> - I remember explaining this problem in a face-to-face meeting in the UK with some OTC people back in February (I think they tried to get you on the phone but they didn´t manage. I do remember they got Daniel though). Here, I proposed that an easy solution (easy, but maybe not right) was to plumb the context down: in Execlists mode, we would retrieve the ringbuffer from the context while, in legacy mode, we would get it from the engine. Everybody seemed to agree with this.
> - I worked on this premise for several versions that I sent to the mailing list for review (first the internal, then intel-gfx). Daniel only complained last month, when he pointed out that he asked, a long long time ago, for a completely separate execution path for Execlists. And this is where we are now...
>
> And now back to the problem at hand: what do you suggest I do now (other than ritual seppuku, I mean)? I need to know the engine (for a lot of reasons), the ringbuffer (to know where to place commands) and the context (to know what to submit to the ELSP). I can spin it a thousand different ways, but I still need to know those three things. At the same time, I cannot reuse the old intel_ringbuffer code because Daniel won´t approve. What would you do?
I think what Chris is trying to say is that all of your operations
should be context driven. The ringbuffer is always a derivative of the
context. If I understand Chris correctly, I agree with him, but he is
being characteristically terse.
There should be two data structures:
intel_engine_cs, formerly intel_ringbuffer - for legacy
intel_context, formerly intel_hw_context - for execlist
You did that.
Then there should be a data structure to represent the ringbuffer within
the execlist context.
You did that, too.
I don't think the fact that there is a separate execbuf path makes any
difference in this conversation, but perhaps I missed some detail.
So at least from what I can tell, the data structures are right. The
problem is that we're mixing and matching intel_engine_cs with the new
[and I wish we could have used a different name] intel_ringbuffer. As
an example from near the top of the patch:
+ intel_logical_ring_advance(ringbuf);
+
+ if (intel_ring_stopped(ring))
+ return;
You're advancing the ringbuf, but checking the ring? That's confusing to
me.
I think the only solution for what Chris is asking for is to implement
this as 1 context per engine, as opposed to 1 context with a context
object per engine. As you correctly stated, I think we all agreed the
latter was fine when we met. Functionally, I see no difference, but it
does allow you to always use a context as the sole mechanism for making
any decisions and performing any operations. Now without writing all the
code, I can't promise it actually will look better, but I think it's
likely going to be a lot cleaner. Before you do any changes though...
On to what I see as the real problem: fundamentally, if Daniel put Chris
in charge of giving the thumbs or down, then you should get Daniel to
agree that he will defer to Chris, and you should do whatever Chris
says. You need not be caught in the middle of Daniel and Chris - it is a
bad place to be (I know from much experience). If Daniel is not okay
with that, then he needs to find a different reviewer.
--
Ben Widawsky, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2014-06-24 0:24 UTC|newest]
Thread overview: 149+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-13 15:37 [PATCH 00/53] Execlists v3 oscar.mateo
2014-06-13 15:37 ` [PATCH 01/53] drm/i915: Extract context backing object allocation oscar.mateo
2014-06-13 15:37 ` [PATCH 02/53] drm/i915: Rename ctx->obj to ctx->render_obj oscar.mateo
2014-06-13 17:00 ` Daniel Vetter
2014-06-16 15:20 ` Mateo Lozano, Oscar
2014-06-13 17:15 ` Chris Wilson
2014-06-13 15:37 ` [PATCH 03/53] drm/i915: Add a dev pointer to the context oscar.mateo
2014-06-13 15:37 ` [PATCH 04/53] drm/i915: Extract ringbuffer destroy & make alloc outside accesible oscar.mateo
2014-06-18 21:39 ` Volkin, Bradley D
2014-06-19 10:42 ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 05/53] drm/i915: Move i915_gem_validate_context() to i915_gem_context.c oscar.mateo
2014-06-13 17:11 ` Chris Wilson
2014-06-16 15:18 ` Mateo Lozano, Oscar
2014-06-18 20:00 ` Volkin, Bradley D
2014-06-13 15:37 ` [PATCH 06/53] drm/i915/bdw: Introduce one context backing object per engine oscar.mateo
2014-06-18 20:16 ` Daniel Vetter
2014-06-19 8:52 ` Mateo Lozano, Oscar
2014-06-19 10:57 ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 07/53] drm/i915/bdw: New file for Logical Ring Contexts and Execlists oscar.mateo
2014-06-18 20:17 ` Daniel Vetter
2014-06-19 9:01 ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 08/53] drm/i915/bdw: Macro for LRCs and module option for Execlists oscar.mateo
2014-06-18 20:19 ` Daniel Vetter
2014-06-19 9:04 ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 09/53] drm/i915/bdw: Initialization for Logical Ring Contexts oscar.mateo
2014-06-18 20:24 ` Daniel Vetter
2014-06-19 9:23 ` Mateo Lozano, Oscar
2014-06-19 10:08 ` Daniel Vetter
2014-06-19 10:10 ` Mateo Lozano, Oscar
2014-06-19 10:34 ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 10/53] drm/i915/bdw: A bit more advanced context init/fini oscar.mateo
2014-06-18 22:13 ` Volkin, Bradley D
2014-06-19 6:13 ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 11/53] drm/i915/bdw: Allocate ringbuffers for Logical Ring Contexts oscar.mateo
2014-06-18 22:19 ` Volkin, Bradley D
2014-06-23 12:07 ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 12/53] drm/i915/bdw: Populate LR contexts (somewhat) oscar.mateo
2014-06-18 23:24 ` Volkin, Bradley D
2014-06-23 12:42 ` Mateo Lozano, Oscar
2014-06-23 15:05 ` Volkin, Bradley D
2014-06-23 15:11 ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 13/53] drm/i915/bdw: Deferred creation of user-created LRCs oscar.mateo
2014-06-18 20:27 ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 14/53] drm/i915/bdw: Render moot context reset and switch when LRCs are enabled oscar.mateo
2014-06-13 15:37 ` [PATCH 15/53] drm/i915/bdw: Don't write PDP in the legacy way when using LRCs oscar.mateo
2014-06-18 23:42 ` Volkin, Bradley D
2014-06-23 12:45 ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 16/53] drm/i915/bdw: Skeleton for the new logical rings submission path oscar.mateo
2014-06-13 15:37 ` [PATCH 17/53] drm/i915/bdw: Generic logical ring init and cleanup oscar.mateo
2014-06-13 15:37 ` [PATCH 18/53] drm/i915/bdw: New header file for LRs, LRCs and Execlists oscar.mateo
2014-06-13 15:37 ` [PATCH 19/53] drm/i915: Extract pipe control fini & make init outside accesible oscar.mateo
2014-06-18 20:31 ` Daniel Vetter
2014-06-19 0:04 ` Volkin, Bradley D
2014-06-19 10:58 ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 20/53] drm/i915/bdw: GEN-specific logical ring init oscar.mateo
2014-06-13 15:37 ` [PATCH 21/53] drm/i915/bdw: GEN-specific logical ring set/get seqno oscar.mateo
2014-06-13 15:37 ` [PATCH 22/53] drm/i915: Make ring_space more generic and outside accesible oscar.mateo
2014-06-13 15:37 ` [PATCH 23/53] drm/i915: Generalize intel_ring_get_tail oscar.mateo
2014-06-20 20:17 ` Volkin, Bradley D
2014-06-13 15:37 ` [PATCH 24/53] drm/i915: Make intel_ring_stopped outside accesible oscar.mateo
2014-06-13 15:37 ` [PATCH 25/53] drm/i915/bdw: GEN-specific logical ring submit context (somewhat) oscar.mateo
2014-06-20 20:28 ` Volkin, Bradley D
2014-06-23 12:49 ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 26/53] drm/i915/bdw: New logical ring submission mechanism oscar.mateo
2014-06-20 21:00 ` Volkin, Bradley D
2014-06-23 13:09 ` Mateo Lozano, Oscar
2014-06-23 13:13 ` Chris Wilson
2014-06-23 13:18 ` Mateo Lozano, Oscar
2014-06-23 13:27 ` Chris Wilson
2014-06-23 13:36 ` Mateo Lozano, Oscar
2014-06-23 13:41 ` Chris Wilson
2014-06-23 14:35 ` Mateo Lozano, Oscar
2014-06-23 19:10 ` Volkin, Bradley D
2014-06-24 12:29 ` Mateo Lozano, Oscar
2014-07-07 12:39 ` Daniel Vetter
2014-06-24 0:23 ` Ben Widawsky [this message]
2014-06-24 11:45 ` Mateo Lozano, Oscar
2014-06-24 14:41 ` Volkin, Bradley D
2014-06-24 17:19 ` Jesse Barnes
2014-06-26 13:28 ` Mateo Lozano, Oscar
2014-07-07 12:41 ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 27/53] drm/i915/bdw: GEN-specific logical ring emit request oscar.mateo
2014-06-20 21:18 ` Volkin, Bradley D
2014-06-23 15:48 ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 28/53] drm/i915/bdw: GEN-specific logical ring emit flush oscar.mateo
2014-06-20 21:39 ` Volkin, Bradley D
2014-06-13 15:37 ` [PATCH 29/53] drm/i915/bdw: Emission of requests with logical rings oscar.mateo
2014-06-13 15:37 ` [PATCH 30/53] drm/i915/bdw: Ring idle and stop " oscar.mateo
2014-06-13 15:37 ` [PATCH 31/53] drm/i915/bdw: Interrupts " oscar.mateo
2014-06-13 15:37 ` [PATCH 32/53] drm/i915/bdw: GEN-specific logical ring emit batchbuffer start oscar.mateo
2014-06-13 15:37 ` [PATCH 33/53] drm/i915: Extract the actual workload submission mechanism from execbuffer oscar.mateo
2014-06-13 15:37 ` [PATCH 34/53] drm/i915: Make move_to_active and retire_commands outside accesible oscar.mateo
2014-06-13 15:37 ` [PATCH 35/53] drm/i915/bdw: Workload submission mechanism for Execlists oscar.mateo
2014-06-13 15:37 ` [PATCH 36/53] drm/i915: Abstract the workload submission mechanism away oscar.mateo
2014-06-18 20:40 ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 37/53] drm/i915/bdw: Implement context switching (somewhat) oscar.mateo
2014-06-13 17:00 ` Chris Wilson
2014-06-13 15:37 ` [PATCH 38/53] drm/i915/bdw: Write the tail pointer, LRC style oscar.mateo
2014-06-13 15:37 ` [PATCH 39/53] drm/i915/bdw: Two-stage execlist submit process oscar.mateo
2014-06-13 15:37 ` [PATCH 40/53] drm/i915/bdw: Handle context switch events oscar.mateo
2014-06-13 15:37 ` [PATCH 41/53] drm/i915/bdw: Avoid non-lite-restore preemptions oscar.mateo
2014-06-18 20:49 ` Daniel Vetter
2014-06-23 11:52 ` Mateo Lozano, Oscar
2014-07-07 12:47 ` Daniel Vetter
2014-06-13 15:38 ` [PATCH 42/53] drm/i915/bdw: Make sure gpu reset still works with Execlists oscar.mateo
2014-06-18 20:50 ` Daniel Vetter
2014-06-19 9:37 ` Mateo Lozano, Oscar
2014-06-13 15:38 ` [PATCH 43/53] drm/i915/bdw: Make sure error capture keeps working " oscar.mateo
2014-06-13 16:54 ` Chris Wilson
2014-06-18 20:52 ` Daniel Vetter
2014-06-18 20:53 ` Daniel Vetter
2014-06-13 15:38 ` [PATCH 44/53] drm/i915/bdw: Help out the ctx switch interrupt handler oscar.mateo
2014-06-13 15:38 ` [PATCH 45/53] drm/i915/bdw: Do not call intel_runtime_pm_get() in an interrupt oscar.mateo
2014-06-18 20:54 ` Daniel Vetter
2014-07-26 10:27 ` Chris Wilson
2014-07-28 8:54 ` Daniel Vetter
2014-07-29 7:37 ` Chris Wilson
2014-07-29 10:26 ` Daniel Vetter
2014-08-08 9:20 ` Chris Wilson
2014-08-08 9:37 ` Daniel Vetter
2014-08-08 13:41 ` Greg KH
2014-08-09 0:18 ` Rafael J. Wysocki
2014-08-09 0:14 ` Rafael J. Wysocki
2014-08-09 1:21 ` [Intel-gfx] " Alan Stern
2014-08-09 8:53 ` Daniel Vetter
2014-08-10 1:55 ` Rafael J. Wysocki
2014-06-13 15:38 ` [PATCH 46/53] drm/i915/bdw: Display execlists info in debugfs oscar.mateo
2014-06-18 20:59 ` Daniel Vetter
2014-06-13 15:38 ` [PATCH 47/53] drm/i915/bdw: Display context backing obj & ringbuffer " oscar.mateo
2014-06-13 15:38 ` [PATCH 48/53] drm/i915/bdw: Print context state " oscar.mateo
2014-06-13 15:38 ` [PATCH 49/53] drm/i915: Extract render state preparation oscar.mateo
2014-06-13 15:38 ` [PATCH 50/53] drm/i915/bdw: Render state init for Execlists oscar.mateo
2014-06-13 15:38 ` [PATCH 51/53] drm/i915/bdw: Document Logical Rings, LR contexts and Execlists oscar.mateo
2014-06-13 16:51 ` Chris Wilson
2014-06-16 15:24 ` Mateo Lozano, Oscar
2014-06-16 17:56 ` Daniel Vetter
2014-06-17 8:22 ` Mateo Lozano, Oscar
2014-06-17 9:39 ` Daniel Vetter
2014-06-17 9:46 ` Mateo Lozano, Oscar
2014-06-17 10:08 ` Daniel Vetter
2014-06-17 10:12 ` Mateo Lozano, Oscar
2014-06-13 15:38 ` [PATCH 52/53] drm/i915/bdw: Enable logical ring contexts oscar.mateo
2014-06-13 15:38 ` [PATCH 53/53] !UPSTREAM: drm/i915: Use MMIO flips oscar.mateo
2014-06-18 21:01 ` Daniel Vetter
2014-06-19 9:50 ` Mateo Lozano, Oscar
2014-06-19 10:04 ` Daniel Vetter
2014-06-19 10:13 ` Chris Wilson
2014-06-19 10:33 ` Mateo Lozano, Oscar
2014-06-18 21:26 ` [PATCH 00/53] Execlists v3 Daniel Vetter
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=20140624002347.GA31605@bwidawsk.net \
--to=ben@bwidawsk.net \
--cc=intel-gfx@lists.freedesktop.org \
--cc=oscar.mateo@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