struct hangcheck {
        u64 acthd;
+       u32 ring;
        u32 seqno;
        enum intel_engine_hangcheck_action action;
        unsigned long action_timestamp;
 {
        hc->acthd = intel_engine_get_active_head(engine);
        hc->seqno = intel_engine_get_hangcheck_seqno(engine);
+       hc->ring = ENGINE_READ(engine, RING_START);
 }
 
 static void hangcheck_store_sample(struct intel_engine_cs *engine,
 {
        engine->hangcheck.acthd = hc->acthd;
        engine->hangcheck.last_seqno = hc->seqno;
+       engine->hangcheck.last_ring = hc->ring;
 }
 
 static enum intel_engine_hangcheck_action
 hangcheck_get_action(struct intel_engine_cs *engine,
                     const struct hangcheck *hc)
 {
-       if (engine->hangcheck.last_seqno != hc->seqno)
-               return ENGINE_ACTIVE_SEQNO;
-
        if (intel_engine_is_idle(engine))
                return ENGINE_IDLE;
 
+       if (engine->hangcheck.last_ring != hc->ring)
+               return ENGINE_ACTIVE_SEQNO;
+
+       if (engine->hangcheck.last_seqno != hc->seqno)
+               return ENGINE_ACTIVE_SEQNO;
+
        return engine_stuck(engine, hc->acthd);
 }