public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH 01/10] drm/i915: Make semaphore updates more precise
@ 2014-06-30 16:53 Rodrigo Vivi
  2014-06-30 16:53 ` [PATCH 02/10] drm/i915: gen specific ring init Rodrigo Vivi
                   ` (8 more replies)
  0 siblings, 9 replies; 18+ messages in thread
From: Rodrigo Vivi @ 2014-06-30 16:53 UTC (permalink / raw)
  To: intel-gfx; +Cc: Ben Widawsky, Rodrigo Vivi

From: Ben Widawsky <ben@bwidawsk.net>

With the ring mask we now have an easy way to know the number of rings
in the system, and therefore can accurately predict the number of dwords
to emit for semaphore signalling. This was not possible (easily)
previously.

There should be no functional impact, simply fewer instructions emitted.

While we're here, simply do the round up to 2 instead of the fancier
rounding we did before, which rounding up per mbox, ie 4. This also
allows us to drop the unnecessary MI_NOOP, so not really 4, 3.

v2: Use 3 dwords instead of 4 (Ville)
Do the proper calculation to get the number of dwords to emit (Ville)
Conditionally set .sync_to when semaphores are enabled (Ville)

v3: Rebased on VCS2
Replace hweight_long with hweight32 (Ville)

v4: Pull out the accidentally squashed hunk from the next patch after
rebase (Daniel).

v5: Fix conflict after rebase (Rodrigo)

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> (v1)
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_ringbuffer.c | 27 +++++++++------------------
 1 file changed, 9 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 2faef26..5c20536 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -679,23 +679,16 @@ static int gen6_signal(struct intel_engine_cs *signaller,
 	struct drm_device *dev = signaller->dev;
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	struct intel_engine_cs *useless;
-	int i, ret;
+	int i, ret, num_rings;
 
-	/* NB: In order to be able to do semaphore MBOX updates for varying
-	 * number of rings, it's easiest if we round up each individual update
-	 * to a multiple of 2 (since ring updates must always be a multiple of
-	 * 2) even though the actual update only requires 3 dwords.
-	 */
-#define MBOX_UPDATE_DWORDS 4
-	if (i915_semaphore_is_enabled(dev))
-		num_dwords += ((I915_NUM_RINGS-1) * MBOX_UPDATE_DWORDS);
-	else
-		return intel_ring_begin(signaller, num_dwords);
+#define MBOX_UPDATE_DWORDS 3
+	num_rings = hweight32(INTEL_INFO(dev)->ring_mask);
+	num_dwords += round_up((num_rings-1) * MBOX_UPDATE_DWORDS, 2);
+#undef MBOX_UPDATE_DWORDS
 
 	ret = intel_ring_begin(signaller, num_dwords);
 	if (ret)
 		return ret;
-#undef MBOX_UPDATE_DWORDS
 
 	for_each_ring(useless, dev_priv, i) {
 		u32 mbox_reg = signaller->semaphore.mbox.signal[i];
@@ -703,15 +696,13 @@ static int gen6_signal(struct intel_engine_cs *signaller,
 			intel_ring_emit(signaller, MI_LOAD_REGISTER_IMM(1));
 			intel_ring_emit(signaller, mbox_reg);
 			intel_ring_emit(signaller, signaller->outstanding_lazy_seqno);
-			intel_ring_emit(signaller, MI_NOOP);
-		} else {
-			intel_ring_emit(signaller, MI_NOOP);
-			intel_ring_emit(signaller, MI_NOOP);
-			intel_ring_emit(signaller, MI_NOOP);
-			intel_ring_emit(signaller, MI_NOOP);
 		}
 	}
 
+	/* If num_dwords was rounded, make sure the tail pointer is correct */
+	if (num_rings % 2 == 0)
+		intel_ring_emit(signaller, MI_NOOP);
+
 	return 0;
 }
 
-- 
1.9.3

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

^ permalink raw reply related	[flat|nested] 18+ messages in thread
* [PATCH 00/10] Semaphores again. Needs shepherd.
@ 2014-05-07 17:26 Ben Widawsky
  2014-05-07 17:27 ` [PATCH 05/10] drm/i915: Implement MI decode for gen8 Ben Widawsky
  0 siblings, 1 reply; 18+ messages in thread
From: Ben Widawsky @ 2014-05-07 17:26 UTC (permalink / raw)
  To: Intel GFX; +Cc: Ben Widawsky

The series is mostly done, but it needs a few last tweaks to make it acceptable
for merge.

Chris noticed that the series doesn't properly work with the new VCS2 code that
Daniel merged a couple of weeks ago. I too noticed this, but was remaining
silent in the hopes that we could actually try to make progress. I raised
concerns about this during the VCS2 merge on IRC. I only took a quick look, and
it seems it's not too bad to implement, but it requires a bit of brain power to
make sure it's correct.

The series is broken in another way because the new semaphore decoding which
Daniel added. Ville posted a fix that looked sane to me, but I haven't a
machine to test with. I'd recommend someone try to beat that into shape and
test it. The series should be /okay/ without that though.

So here are the latest patches that I have. I just don't have enough time
before my vacation to get these things done. They've gone through 5 rounds of
rebase since the first series was posted on 12/13/13. They get the first thumbs
up from Ville on Mar 5 (a couple of minor tweaks were required and could have
been easily done by the maintainer). I've fixed everything I am aware. If
someone could take over the patches, and get them merged, I think it'd really
help in getting this useful feature added to our driver for gen8.

* The last two patches aren't needed, but are here for posterity.

If nobody has taken this over when I return I will see if I can complete it.

Ben Widawsky (10):
  drm/i915: Make semaphore updates more precise
  drm/i915: gen specific ring init
  drm/i915/bdw: implement semaphore signal
  drm/i915/bdw: implement semaphore wait
  drm/i915: Implement MI decode for gen8
  drm/i915: Extract semaphore error collection
  drm/i915/bdw: collect semaphore error state
  drm/i915: semaphore debugfs
  drm/i915/bdw: poll semaphores
  DONT_MERGE drm/i915: FORCE_RESTORE for gen8 semaphores

 drivers/gpu/drm/i915/i915_debugfs.c     |  70 +++++++
 drivers/gpu/drm/i915/i915_drv.h         |   2 +
 drivers/gpu/drm/i915/i915_gem_context.c |   7 +
 drivers/gpu/drm/i915/i915_gpu_error.c   |  79 ++++++--
 drivers/gpu/drm/i915/i915_irq.c         |  11 +-
 drivers/gpu/drm/i915/i915_reg.h         |   8 +-
 drivers/gpu/drm/i915/intel_ringbuffer.c | 342 +++++++++++++++++++++++---------
 drivers/gpu/drm/i915/intel_ringbuffer.h |  78 +++++++-
 8 files changed, 474 insertions(+), 123 deletions(-)

-- 
1.9.2

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

end of thread, other threads:[~2014-07-14 18:22 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-30 16:53 [PATCH 01/10] drm/i915: Make semaphore updates more precise Rodrigo Vivi
2014-06-30 16:53 ` [PATCH 02/10] drm/i915: gen specific ring init Rodrigo Vivi
2014-06-30 16:53 ` [PATCH 03/10] drm/i915/bdw: implement semaphore signal Rodrigo Vivi
2014-06-30 16:53 ` [PATCH 04/10] drm/i915/bdw: implement semaphore wait Rodrigo Vivi
2014-06-30 16:53 ` [PATCH 05/10] drm/i915: Implement MI decode for gen8 Rodrigo Vivi
2014-07-01  0:13   ` Ben Widawsky
2014-07-07 21:17   ` Daniel Vetter
2014-07-07 14:29     ` [PATCH] " Rodrigo Vivi
2014-06-30 16:53 ` [PATCH 06/10] drm/i915: Extract semaphore error collection Rodrigo Vivi
2014-06-30 16:53 ` [PATCH 07/10] drm/i915/bdw: collect semaphore error state Rodrigo Vivi
2014-07-14 10:04   ` Damien Lespiau
2014-07-14 18:22     ` Ben Widawsky
2014-06-30 16:53 ` [PATCH 08/10] drm/i915: semaphore debugfs Rodrigo Vivi
2014-06-30 16:53 ` [PATCH 09/10] drm/i915/bdw: poll semaphores Rodrigo Vivi
2014-06-30 16:53 ` [PATCH 10/10] drm/i915: Enable semaphores on BDW Rodrigo Vivi
2014-07-01  0:14   ` Ben Widawsky
2014-07-07 20:26     ` Daniel Vetter
  -- strict thread matches above, loose matches on Subject: below --
2014-05-07 17:26 [PATCH 00/10] Semaphores again. Needs shepherd Ben Widawsky
2014-05-07 17:27 ` [PATCH 05/10] drm/i915: Implement MI decode for gen8 Ben Widawsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox