diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.h | 3 |
2 files changed, 9 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index b26243f09c91..208e6753aec5 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -2380,7 +2380,8 @@ static void semaphore_clear_deadlocks(struct drm_i915_private *dev_priv) | |||
2380 | ring->hangcheck.deadlock = false; | 2380 | ring->hangcheck.deadlock = false; |
2381 | } | 2381 | } |
2382 | 2382 | ||
2383 | static enum { wait, active, kick, hung } ring_stuck(struct intel_ring_buffer *ring, u32 acthd) | 2383 | static enum intel_ring_hangcheck_action |
2384 | ring_stuck(struct intel_ring_buffer *ring, u32 acthd) | ||
2384 | { | 2385 | { |
2385 | struct drm_device *dev = ring->dev; | 2386 | struct drm_device *dev = ring->dev; |
2386 | struct drm_i915_private *dev_priv = dev->dev_private; | 2387 | struct drm_i915_private *dev_priv = dev->dev_private; |
@@ -2483,7 +2484,10 @@ void i915_hangcheck_elapsed(unsigned long data) | |||
2483 | * being repeatedly kicked and so responsible | 2484 | * being repeatedly kicked and so responsible |
2484 | * for stalling the machine. | 2485 | * for stalling the machine. |
2485 | */ | 2486 | */ |
2486 | switch (ring_stuck(ring, acthd)) { | 2487 | ring->hangcheck.action = ring_stuck(ring, |
2488 | acthd); | ||
2489 | |||
2490 | switch (ring->hangcheck.action) { | ||
2487 | case wait: | 2491 | case wait: |
2488 | score = 0; | 2492 | score = 0; |
2489 | break; | 2493 | break; |
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h index a3e96103dbe5..799f04c9da45 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.h +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h | |||
@@ -37,11 +37,14 @@ struct intel_hw_status_page { | |||
37 | #define I915_READ_SYNC_0(ring) I915_READ(RING_SYNC_0((ring)->mmio_base)) | 37 | #define I915_READ_SYNC_0(ring) I915_READ(RING_SYNC_0((ring)->mmio_base)) |
38 | #define I915_READ_SYNC_1(ring) I915_READ(RING_SYNC_1((ring)->mmio_base)) | 38 | #define I915_READ_SYNC_1(ring) I915_READ(RING_SYNC_1((ring)->mmio_base)) |
39 | 39 | ||
40 | enum intel_ring_hangcheck_action { wait, active, kick, hung }; | ||
41 | |||
40 | struct intel_ring_hangcheck { | 42 | struct intel_ring_hangcheck { |
41 | bool deadlock; | 43 | bool deadlock; |
42 | u32 seqno; | 44 | u32 seqno; |
43 | u32 acthd; | 45 | u32 acthd; |
44 | int score; | 46 | int score; |
47 | enum intel_ring_hangcheck_action action; | ||
45 | }; | 48 | }; |
46 | 49 | ||
47 | struct intel_ring_buffer { | 50 | struct intel_ring_buffer { |