Re: [Intel-gfx] [PATCH] drm/i915: Move hangcheck code out from i915_irq.c

2016-11-01 Thread Chris Wilson
On Tue, Nov 01, 2016 at 06:43:03PM +0200, Mika Kuoppala wrote:
> Create new file for hangcheck specific code, intel_hangcheck.c,
> and move all related code in it.
> 
> v2: s/intel_engine_hangcheck/intel_engine (Chris)
> 
> No functional changes.
> 
> Cc: Chris Wilson 
> Cc: Joonas Lahtinen 
> Cc: Tvrtko Ursulin 
> Signed-off-by: Mika Kuoppala 
Reviewed-by: Chris Wilson 
-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] [PATCH] drm/i915: Move hangcheck code out from i915_irq.c

2016-11-01 Thread Mika Kuoppala
Create new file for hangcheck specific code, intel_hangcheck.c,
and move all related code in it.

v2: s/intel_engine_hangcheck/intel_engine (Chris)

No functional changes.

Cc: Chris Wilson 
Cc: Joonas Lahtinen 
Cc: Tvrtko Ursulin 
Signed-off-by: Mika Kuoppala 
---
 drivers/gpu/drm/i915/Makefile  |   1 +
 drivers/gpu/drm/i915/i915_drv.c|   1 +
 drivers/gpu/drm/i915/i915_drv.h|   1 +
 drivers/gpu/drm/i915/i915_irq.c| 417 --
 drivers/gpu/drm/i915/intel_engine_cs.c |   5 -
 drivers/gpu/drm/i915/intel_hangcheck.c | 450 +
 6 files changed, 453 insertions(+), 422 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/intel_hangcheck.c

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 240ce9a..0857e50 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -47,6 +47,7 @@ i915-y += i915_cmd_parser.o \
  i915_trace_points.o \
  intel_breadcrumbs.o \
  intel_engine_cs.o \
+ intel_hangcheck.o \
  intel_lrc.o \
  intel_mocs.o \
  intel_ringbuffer.o \
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 48f4d21..9e5a547 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -830,6 +830,7 @@ static int i915_driver_init_early(struct drm_i915_private 
*dev_priv,
intel_init_dpio(dev_priv);
intel_power_domains_init(dev_priv);
intel_irq_init(dev_priv);
+   intel_hangcheck_init(dev_priv);
intel_init_display_hooks(dev_priv);
intel_init_clock_gating_hooks(dev_priv);
intel_init_audio_hooks(dev_priv);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index b8e72cd..6c0b0a6 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3002,6 +3002,7 @@ extern bool intel_has_gpu_reset(struct drm_i915_private 
*dev_priv);
 extern void i915_reset(struct drm_i915_private *dev_priv);
 extern int intel_guc_reset(struct drm_i915_private *dev_priv);
 extern void intel_engine_init_hangcheck(struct intel_engine_cs *engine);
+extern void intel_hangcheck_init(struct drm_i915_private *dev_priv);
 extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv);
 extern unsigned long i915_mch_val(struct drm_i915_private *dev_priv);
 extern unsigned long i915_gfx_val(struct drm_i915_private *dev_priv);
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index ecd06d3..6d7505b 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -2848,420 +2848,6 @@ static void gen8_disable_vblank(struct drm_device *dev, 
unsigned int pipe)
spin_unlock_irqrestore(_priv->irq_lock, irqflags);
 }
 
-static bool
-ipehr_is_semaphore_wait(struct intel_engine_cs *engine, u32 ipehr)
-{
-   if (INTEL_GEN(engine->i915) >= 8) {
-   return (ipehr >> 23) == 0x1c;
-   } else {
-   ipehr &= ~MI_SEMAPHORE_SYNC_MASK;
-   return ipehr == (MI_SEMAPHORE_MBOX | MI_SEMAPHORE_COMPARE |
-MI_SEMAPHORE_REGISTER);
-   }
-}
-
-static struct intel_engine_cs *
-semaphore_wait_to_signaller_ring(struct intel_engine_cs *engine, u32 ipehr,
-u64 offset)
-{
-   struct drm_i915_private *dev_priv = engine->i915;
-   struct intel_engine_cs *signaller;
-   enum intel_engine_id id;
-
-   if (INTEL_GEN(dev_priv) >= 8) {
-   for_each_engine(signaller, dev_priv, id) {
-   if (engine == signaller)
-   continue;
-
-   if (offset == 
signaller->semaphore.signal_ggtt[engine->hw_id])
-   return signaller;
-   }
-   } else {
-   u32 sync_bits = ipehr & MI_SEMAPHORE_SYNC_MASK;
-
-   for_each_engine(signaller, dev_priv, id) {
-   if(engine == signaller)
-   continue;
-
-   if (sync_bits == 
signaller->semaphore.mbox.wait[engine->hw_id])
-   return signaller;
-   }
-   }
-
-   DRM_DEBUG_DRIVER("No signaller ring found for %s, ipehr 0x%08x, offset 
0x%016llx\n",
-engine->name, ipehr, offset);
-
-   return ERR_PTR(-ENODEV);
-}
-
-static struct intel_engine_cs *
-semaphore_waits_for(struct intel_engine_cs *engine, u32 *seqno)
-{
-   struct drm_i915_private *dev_priv = engine->i915;
-   void __iomem *vaddr;
-   u32 cmd, ipehr, head;
-   u64 offset = 0;
-   int i, backwards;
-
-   /*
-* This function does not support execlist mode - any attempt to
-* proceed further into this function will result in a kernel panic
-