All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/55] Remove the outstanding_lazy_request
@ 2015-05-29 16:43 John.C.Harrison
  2015-05-29 16:43 ` [PATCH 01/55] drm/i915: Re-instate request->uniq becuase it is extremely useful John.C.Harrison
                   ` (56 more replies)
  0 siblings, 57 replies; 120+ messages in thread
From: John.C.Harrison @ 2015-05-29 16:43 UTC (permalink / raw)
  To: Intel-GFX

From: John Harrison <John.C.Harrison@Intel.com>

The driver tracks GPU work using request structures. Unfortunately, this
tracking is not currently explicit but is done by means of a catch-all request
that floats around in the background hoovering up work until it gets submitted.
This background request (ring->outstanding_lazy_request or OLR) is created at
the point of actually writing to the ring rather than when a particular piece of
GPU work is started. This scheme sort of hangs together but causes a number of
issues. It can mean that multiple pieces of independent work are lumped together
in the same request or that work is not officially submitted until much later
than it was created.

This patch series completely removes the OLR and explicitly tracks each piece of
work with it's own personal request structure from start to submission.

The patch set seems to fix the "'gem_ringfill --r render' + ctrl-c straight
after boot" issue logged as BZ:88865. I haven't done any analysis of that
particular issue but the descriptions I've seen appear to blame an inconsistent
or mangled OLR.

Note also that by the end of this series, a number of differences between the
legacy and execlist code paths have been removed. For example add_request() and
emit_request() now have the same signature thus could be merged back to a single
function pointer. Merging some of these together would also allow the removal of
a bunch of 'if(execlists)' tests where the difference is simply to call the
legacy function or the execlist one.

v2: Rebased to newer nightly tree, fixed up a few minor issues, added two extra
patches - one to move the LRC ring begin around in the vein of other recent
reshuffles, the other to clean up some issues with i915_add_request().

v3: Large re-work due to feedback from code review. Some patches have been
removed, extra ones have been added and others have been changed significantly.
It is recommended that all patches are reviewed from scratch rather than
assuming only certain ones have changed and need re-inspecting. The exceptions
are where the 'reviewed-by' tag has been kept because that patch was not
significantly affected.

v4: Further updates due to review feedback and rebasing on top of significant
changes to the underlying tree.

[Patches against drm-intel-nightly tree fetched 22/05/2015]

John Harrison (55):
  drm/i915: Re-instate request->uniq becuase it is extremely useful
  drm/i915: Reserve ring buffer space for i915_add_request() commands
  drm/i915: i915_add_request must not fail
  drm/i915: Early alloc request in execbuff
  drm/i915: Set context in request from creation even in legacy mode
  drm/i915: Merged the many do_execbuf() parameters into a structure
  drm/i915: Simplify i915_gem_execbuffer_retire_commands() parameters
  drm/i915: Update alloc_request to return the allocated request
  drm/i915: Add request to execbuf params and add explicit cleanup
  drm/i915: Update the dispatch tracepoint to use params->request
  drm/i915: Update move_to_gpu() to take a request structure
  drm/i915: Update execbuffer_move_to_active() to take a request structure
  drm/i915: Add flag to i915_add_request() to skip the cache flush
  drm/i915: Update i915_gpu_idle() to manage its own request
  drm/i915: Split i915_ppgtt_init_hw() in half - generic and per ring
  drm/i915: Moved the for_each_ring loop outside of i915_gem_context_enable()
  drm/i915: Don't tag kernel batches as user batches
  drm/i915: Add explicit request management to i915_gem_init_hw()
  drm/i915: Update ppgtt_init_ring() & context_enable() to take requests
  drm/i915: Update i915_switch_context() to take a request structure
  drm/i915: Update do_switch() to take a request structure
  drm/i915: Update deferred context creation to do explicit request management
  drm/i915: Update init_context() to take a request structure
  drm/i915: Update render_state_init() to take a request structure
  drm/i915: Update i915_gem_object_sync() to take a request structure
  drm/i915: Update overlay code to do explicit request management
  drm/i915: Update queue_flip() to take a request structure
  drm/i915: Update add_request() to take a request structure
  drm/i915: Update [vma|object]_move_to_active() to take request structures
  drm/i915: Update l3_remap to take a request structure
  drm/i915: Update mi_set_context() to take a request structure
  drm/i915: Update a bunch of execbuffer helpers to take request structures
  drm/i915: Update workarounds_emit() to take request structures
  drm/i915: Update flush_all_caches() to take request structures
  drm/i915: Update switch_mm() to take a request structure
  drm/i915: Update ring->flush() to take a requests structure
  drm/i915: Update some flush helpers to take request structures
  drm/i915: Update ring->emit_flush() to take a request structure
  drm/i915: Update ring->add_request() to take a request structure
  drm/i915: Update ring->emit_request() to take a request structure
  drm/i915: Update ring->dispatch_execbuffer() to take a request structure
  drm/i915: Update ring->emit_bb_start() to take a request structure
  drm/i915: Update ring->sync_to() to take a request structure
  drm/i915: Update ring->signal() to take a request structure
  drm/i915: Update cacheline_align() to take a request structure
  drm/i915: Update intel_ring_begin() to take a request structure
  drm/i915: Update intel_logical_ring_begin() to take a request structure
  drm/i915: Add *_ring_begin() to request allocation
  drm/i915: Remove the now obsolete intel_ring_get_request()
  drm/i915: Remove the now obsolete 'outstanding_lazy_request'
  drm/i915: Move the request/file and request/pid association to creation time
  drm/i915: Remove 'faked' request from LRC submission
  drm/i915: Update a bunch of LRC functions to take requests
  drm/i915: Remove the now obsolete 'i915_gem_check_olr()'
  drm/i915: Rename the somewhat reduced i915_gem_object_flush_active()

 drivers/gpu/drm/i915/i915_drv.h              |   77 +++---
 drivers/gpu/drm/i915/i915_gem.c              |  368 ++++++++++++++++----------
 drivers/gpu/drm/i915/i915_gem_context.c      |   78 +++---
 drivers/gpu/drm/i915/i915_gem_execbuffer.c   |  128 +++++----
 drivers/gpu/drm/i915/i915_gem_gtt.c          |   59 +++--
 drivers/gpu/drm/i915/i915_gem_gtt.h          |    3 +-
 drivers/gpu/drm/i915/i915_gem_render_state.c |   15 +-
 drivers/gpu/drm/i915/i915_gem_render_state.h |    2 +-
 drivers/gpu/drm/i915/i915_trace.h            |   41 +--
 drivers/gpu/drm/i915/intel_display.c         |   60 +++--
 drivers/gpu/drm/i915/intel_drv.h             |    3 +-
 drivers/gpu/drm/i915/intel_fbdev.c           |    2 +-
 drivers/gpu/drm/i915/intel_lrc.c             |  265 +++++++++----------
 drivers/gpu/drm/i915/intel_lrc.h             |   16 +-
 drivers/gpu/drm/i915/intel_overlay.c         |   63 +++--
 drivers/gpu/drm/i915/intel_ringbuffer.c      |  303 +++++++++++++--------
 drivers/gpu/drm/i915/intel_ringbuffer.h      |   53 ++--
 17 files changed, 876 insertions(+), 660 deletions(-)

-- 
1.7.9.5

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 120+ messages in thread

end of thread, other threads:[~2015-06-24 17:05 UTC | newest]

Thread overview: 120+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-29 16:43 [PATCH 00/55] Remove the outstanding_lazy_request John.C.Harrison
2015-05-29 16:43 ` [PATCH 01/55] drm/i915: Re-instate request->uniq becuase it is extremely useful John.C.Harrison
2015-06-03 11:14   ` Tomas Elf
2015-05-29 16:43 ` [PATCH 02/55] drm/i915: Reserve ring buffer space for i915_add_request() commands John.C.Harrison
2015-06-02 18:14   ` Tomas Elf
2015-06-04 12:06   ` John.C.Harrison
2015-06-09 16:00     ` Tomas Elf
2015-06-18 12:10       ` John.C.Harrison
2015-06-17 14:04     ` Daniel Vetter
2015-06-18 10:43       ` John Harrison
2015-06-19 16:34   ` John.C.Harrison
2015-06-22 20:12     ` Daniel Vetter
2015-06-23 11:38       ` John Harrison
2015-06-23 13:24         ` Daniel Vetter
2015-06-23 15:43           ` John Harrison
2015-06-23 20:00             ` Daniel Vetter
2015-06-24 12:18               ` John Harrison
2015-06-24 12:45                 ` Daniel Vetter
2015-06-24 17:05                   ` John Harrison
2015-05-29 16:43 ` [PATCH 03/55] drm/i915: i915_add_request must not fail John.C.Harrison
2015-06-02 18:16   ` Tomas Elf
2015-06-04 14:07     ` John Harrison
2015-06-05 10:55       ` Tomas Elf
2015-06-23 10:16   ` Chris Wilson
2015-06-23 10:47     ` John Harrison
2015-05-29 16:43 ` [PATCH 04/55] drm/i915: Early alloc request in execbuff John.C.Harrison
2015-05-29 16:43 ` [PATCH 05/55] drm/i915: Set context in request from creation even in legacy mode John.C.Harrison
2015-05-29 16:43 ` [PATCH 06/55] drm/i915: Merged the many do_execbuf() parameters into a structure John.C.Harrison
2015-05-29 16:43 ` [PATCH 07/55] drm/i915: Simplify i915_gem_execbuffer_retire_commands() parameters John.C.Harrison
2015-05-29 16:43 ` [PATCH 08/55] drm/i915: Update alloc_request to return the allocated request John.C.Harrison
2015-05-29 16:43 ` [PATCH 09/55] drm/i915: Add request to execbuf params and add explicit cleanup John.C.Harrison
2015-05-29 16:43 ` [PATCH 10/55] drm/i915: Update the dispatch tracepoint to use params->request John.C.Harrison
2015-05-29 16:43 ` [PATCH 11/55] drm/i915: Update move_to_gpu() to take a request structure John.C.Harrison
2015-05-29 16:43 ` [PATCH 12/55] drm/i915: Update execbuffer_move_to_active() " John.C.Harrison
2015-05-29 16:43 ` [PATCH 13/55] drm/i915: Add flag to i915_add_request() to skip the cache flush John.C.Harrison
2015-06-02 18:19   ` Tomas Elf
2015-05-29 16:43 ` [PATCH 14/55] drm/i915: Update i915_gpu_idle() to manage its own request John.C.Harrison
2015-05-29 16:43 ` [PATCH 15/55] drm/i915: Split i915_ppgtt_init_hw() in half - generic and per ring John.C.Harrison
2015-06-18 12:11   ` John.C.Harrison
2015-05-29 16:43 ` [PATCH 16/55] drm/i915: Moved the for_each_ring loop outside of i915_gem_context_enable() John.C.Harrison
2015-05-29 16:43 ` [PATCH 17/55] drm/i915: Don't tag kernel batches as user batches John.C.Harrison
2015-05-29 16:43 ` [PATCH 18/55] drm/i915: Add explicit request management to i915_gem_init_hw() John.C.Harrison
2015-06-02 18:20   ` Tomas Elf
2015-05-29 16:43 ` [PATCH 19/55] drm/i915: Update ppgtt_init_ring() & context_enable() to take requests John.C.Harrison
2015-05-29 16:43 ` [PATCH 20/55] drm/i915: Update i915_switch_context() to take a request structure John.C.Harrison
2015-05-29 16:43 ` [PATCH 21/55] drm/i915: Update do_switch() " John.C.Harrison
2015-05-29 16:43 ` [PATCH 22/55] drm/i915: Update deferred context creation to do explicit request management John.C.Harrison
2015-06-02 18:22   ` Tomas Elf
2015-05-29 16:43 ` [PATCH 23/55] drm/i915: Update init_context() to take a request structure John.C.Harrison
2015-05-29 16:43 ` [PATCH 24/55] drm/i915: Update render_state_init() " John.C.Harrison
2015-05-29 16:43 ` [PATCH 25/55] drm/i915: Update i915_gem_object_sync() " John.C.Harrison
2015-06-02 18:26   ` Tomas Elf
2015-06-04 12:57     ` John Harrison
2015-06-18 12:14       ` John.C.Harrison
2015-06-18 12:21         ` Chris Wilson
2015-06-18 12:59           ` John Harrison
2015-06-18 14:24             ` Daniel Vetter
2015-06-18 15:39               ` Chris Wilson
2015-06-18 16:16                 ` John Harrison
2015-06-22 20:03                   ` Daniel Vetter
2015-06-22 20:14                     ` Chris Wilson
2015-06-18 16:36         ` 3.16 backlight kernel options Stéphane ANCELOT
2015-05-29 16:43 ` [PATCH 26/55] drm/i915: Update overlay code to do explicit request management John.C.Harrison
2015-05-29 16:43 ` [PATCH 27/55] drm/i915: Update queue_flip() to take a request structure John.C.Harrison
2015-05-29 16:43 ` [PATCH 28/55] drm/i915: Update add_request() " John.C.Harrison
2015-05-29 16:43 ` [PATCH 29/55] drm/i915: Update [vma|object]_move_to_active() to take request structures John.C.Harrison
2015-05-29 16:43 ` [PATCH 30/55] drm/i915: Update l3_remap to take a request structure John.C.Harrison
2015-05-29 16:43 ` [PATCH 31/55] drm/i915: Update mi_set_context() " John.C.Harrison
2015-05-29 16:43 ` [PATCH 32/55] drm/i915: Update a bunch of execbuffer helpers to take request structures John.C.Harrison
2015-05-29 16:43 ` [PATCH 33/55] drm/i915: Update workarounds_emit() " John.C.Harrison
2015-05-29 16:43 ` [PATCH 34/55] drm/i915: Update flush_all_caches() " John.C.Harrison
2015-05-29 16:43 ` [PATCH 35/55] drm/i915: Update switch_mm() to take a request structure John.C.Harrison
2015-05-29 16:43 ` [PATCH 36/55] drm/i915: Update ring->flush() to take a requests structure John.C.Harrison
2015-05-29 16:43 ` [PATCH 37/55] drm/i915: Update some flush helpers to take request structures John.C.Harrison
2015-05-29 16:43 ` [PATCH 38/55] drm/i915: Update ring->emit_flush() to take a request structure John.C.Harrison
2015-05-29 16:44 ` [PATCH 39/55] drm/i915: Update ring->add_request() " John.C.Harrison
2015-05-29 16:44 ` [PATCH 40/55] drm/i915: Update ring->emit_request() " John.C.Harrison
2015-05-29 16:44 ` [PATCH 41/55] drm/i915: Update ring->dispatch_execbuffer() " John.C.Harrison
2015-05-29 16:44 ` [PATCH 42/55] drm/i915: Update ring->emit_bb_start() " John.C.Harrison
2015-05-29 16:44 ` [PATCH 43/55] drm/i915: Update ring->sync_to() " John.C.Harrison
2015-05-29 16:44 ` [PATCH 44/55] drm/i915: Update ring->signal() " John.C.Harrison
2015-05-29 16:44 ` [PATCH 45/55] drm/i915: Update cacheline_align() " John.C.Harrison
2015-05-29 16:44 ` [PATCH 46/55] drm/i915: Update intel_ring_begin() " John.C.Harrison
2015-06-23 10:24   ` Chris Wilson
2015-06-23 10:37     ` John Harrison
2015-06-23 13:25       ` Daniel Vetter
2015-06-23 15:27         ` John Harrison
2015-06-23 15:34           ` Daniel Vetter
2015-05-29 16:44 ` [PATCH 47/55] drm/i915: Update intel_logical_ring_begin() " John.C.Harrison
2015-05-29 16:44 ` [PATCH 48/55] drm/i915: Add *_ring_begin() to request allocation John.C.Harrison
2015-06-17 13:31   ` Daniel Vetter
2015-06-17 14:27     ` Chris Wilson
2015-06-17 14:54       ` Daniel Vetter
2015-06-17 15:52         ` Chris Wilson
2015-06-18 11:21           ` John Harrison
2015-06-18 13:29             ` Daniel Vetter
2015-06-19 16:34               ` John Harrison
2015-05-29 16:44 ` [PATCH 49/55] drm/i915: Remove the now obsolete intel_ring_get_request() John.C.Harrison
2015-05-29 16:44 ` [PATCH 50/55] drm/i915: Remove the now obsolete 'outstanding_lazy_request' John.C.Harrison
2015-05-29 16:44 ` [PATCH 51/55] drm/i915: Move the request/file and request/pid association to creation time John.C.Harrison
2015-06-03 11:15   ` Tomas Elf
2015-05-29 16:44 ` [PATCH 52/55] drm/i915: Remove 'faked' request from LRC submission John.C.Harrison
2015-05-29 16:44 ` [PATCH 53/55] drm/i915: Update a bunch of LRC functions to take requests John.C.Harrison
2015-05-29 16:44 ` [PATCH 54/55] drm/i915: Remove the now obsolete 'i915_gem_check_olr()' John.C.Harrison
2015-06-02 18:27   ` Tomas Elf
2015-06-23 10:23   ` Chris Wilson
2015-06-23 10:39     ` John Harrison
2015-05-29 16:44 ` [PATCH 55/55] drm/i915: Rename the somewhat reduced i915_gem_object_flush_active() John.C.Harrison
2015-06-02 18:27   ` Tomas Elf
2015-06-17 14:06   ` Daniel Vetter
2015-06-17 14:21     ` Chris Wilson
2015-06-18 11:03       ` John Harrison
2015-06-18 11:10         ` Chris Wilson
2015-06-18 11:27           ` John Harrison
2015-06-18 10:57     ` John Harrison
2015-06-04 18:23 ` [PATCH 14/56] drm/i915: Make retire condition check for requests not objects John.C.Harrison
2015-06-04 18:24   ` John Harrison
2015-06-09 15:56   ` Tomas Elf
2015-06-17 15:01     ` Daniel Vetter
2015-06-22 21:04 ` [PATCH 00/55] Remove the outstanding_lazy_request Daniel Vetter

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.