ring->hangcheck.deadlock = false;
}
-static enum { wait, active, kick, hung } ring_stuck(struct intel_ring_buffer *ring, u32 acthd)
+static enum intel_ring_hangcheck_action
+ring_stuck(struct intel_ring_buffer *ring, u32 acthd)
{
struct drm_device *dev = ring->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
* being repeatedly kicked and so responsible
* for stalling the machine.
*/
- switch (ring_stuck(ring, acthd)) {
+ ring->hangcheck.action = ring_stuck(ring,
+ acthd);
+
+ switch (ring->hangcheck.action) {
case wait:
score = 0;
break;
#define I915_READ_SYNC_0(ring) I915_READ(RING_SYNC_0((ring)->mmio_base))
#define I915_READ_SYNC_1(ring) I915_READ(RING_SYNC_1((ring)->mmio_base))
+enum intel_ring_hangcheck_action { wait, active, kick, hung };
+
struct intel_ring_hangcheck {
bool deadlock;
u32 seqno;
u32 acthd;
int score;
+ enum intel_ring_hangcheck_action action;
};
struct intel_ring_buffer {