}
 }
 
-static void intel_engine_print_registers(const struct intel_engine_cs *engine,
+static void intel_engine_print_registers(struct intel_engine_cs *engine,
                                         struct drm_printer *m)
 {
        struct drm_i915_private *dev_priv = engine->i915;
        const struct intel_engine_execlists * const execlists =
                &engine->execlists;
+       unsigned long flags;
        u64 addr;
 
        if (engine->id == RCS0 && IS_GEN_RANGE(dev_priv, 4, 7))
                                   idx, hws[idx * 2], hws[idx * 2 + 1]);
                }
 
-               rcu_read_lock();
+               spin_lock_irqsave(&engine->active.lock, flags);
                for (idx = 0; idx < execlists_num_ports(execlists); idx++) {
                        struct i915_request *rq;
                        unsigned int count;
+                       char hdr[80];
 
                        rq = port_unpack(&execlists->port[idx], &count);
-                       if (rq) {
-                               char hdr[80];
-
+                       if (!rq) {
+                               drm_printf(m, "\t\tELSP[%d] idle\n", idx);
+                       } else if (!i915_request_signaled(rq)) {
                                snprintf(hdr, sizeof(hdr),
                                         "\t\tELSP[%d] count=%d, ring:{start:%08x, hwsp:%08x, seqno:%08x}, rq: ",
                                         idx, count,
                                         hwsp_seqno(rq));
                                print_request(m, rq, hdr);
                        } else {
-                               drm_printf(m, "\t\tELSP[%d] idle\n", idx);
+                               print_request(m, rq, "\t\tELSP[%d] rq: ");
                        }
                }
                drm_printf(m, "\t\tHW active? 0x%x\n", execlists->active);
-               rcu_read_unlock();
+               spin_unlock_irqrestore(&engine->active.lock, flags);
        } else if (INTEL_GEN(dev_priv) > 6) {
                drm_printf(m, "\tPP_DIR_BASE: 0x%08x\n",
                           ENGINE_READ(engine, RING_PP_DIR_BASE));