[Intel-gfx] [PATCH 00/17] Broadwell HW semaphores

Ben Widawsky benjamin.widawsky at intel.com
Sat Dec 14 05:15:48 CET 2013


This patch series implements hardware semaphores to be on par with support of
other platforms. The biggest change in the series is the removal of the
mailboxes we previously had. To replace this, there is a 4k BO allocated for
the semaphore communication. This could have also been done in the HWSP.
Since we have per-ring HWSP, I don't see a big one, and I have a theory
that the cache locality would be a win.

There are two very important notes:
1. gem_ring_sync_loop is one of the best focus tests that we have for
semaphores. This test is currently hanging. I still get through many
sync sequences between rings (in fact, the test has even succeeded a few
times), and the hang is on an unrelated instruction. I have some
suspicion that the issue is actually related to the MI_FLUSH_DW and not
the semaphores at all.

2. The debug/error code which reads the semaphores is not working when
read back from the CPU. This is an extremely worrying thing, and I am
somewhat hopeful that review will the solution. Reading the same page
through the GTT works as expected. See the debugfs patch for a nice
isolated example of what fails (though the error collection code
contains the same problem).

With that, the patches probably should not be merged completely - but
maybe some of the prep patches can be merged now, making the rebase pain
lessened while I finish debugging. Anyone who finds any bugs that solve
my issues will be my best friend for a week.

Ben Widawsky (17):
  drm/i915: Reorder/respace MI instruction definition
  drm/i915: Don't emit mbox updates without semaphores
  drm/i915: Move semaphore specific ring members to struct
  drm/i915: Virtualize the ringbuffer signal func
  drm/i915: Move ring_begin to signal()
  drm/i915: Make semaphore updates more precise
  drm/i915: gen specific semaphore info
  drm/i915: Create for_all_rings
  drm/i915: init ring->id early
  drm/i915/bdw: implement semaphore signal
  drm/i915/bdw: implement semaphore wait
  drm/i915: FORCE_RESTORE for gen8 semaphores
  drm/i915/bdw: poll semaphores
  drm/i915: Extract semaphore error collection
  drm/i915/bdw: collect semaphore error state
  drm/i915: unleash semaphores on gen8
  drm/i915: semaphore debugfs

 drivers/gpu/drm/i915/i915_debugfs.c     |  69 +++++++
 drivers/gpu/drm/i915/i915_drv.c         |   6 -
 drivers/gpu/drm/i915/i915_drv.h         |   6 +
 drivers/gpu/drm/i915/i915_gem.c         |  16 +-
 drivers/gpu/drm/i915/i915_gem_context.c |   9 +
 drivers/gpu/drm/i915/i915_gpu_error.c   |  75 ++++++--
 drivers/gpu/drm/i915/i915_reg.h         |  58 +++---
 drivers/gpu/drm/i915/intel_ringbuffer.c | 332 ++++++++++++++++++++++++--------
 drivers/gpu/drm/i915/intel_ringbuffer.h |  85 +++++++-
 9 files changed, 514 insertions(+), 142 deletions(-)

-- 
1.8.5.1




More information about the Intel-gfx mailing list