Quoting Mika Kuoppala (2017-10-19 15:39:41) > while (test_bit(ENGINE_IRQ_EXECLIST, &engine->irq_posted)) { > + struct execlist_port *port; > + > /* The HWSP contains a (cacheable) mirror of the CSB */ > const u32 *buf = > &engine->status_page.page_addr[I915_HWS_CSB_BUF0_INDEX]; > @@ -855,7 +865,7 @@ static void intel_lrc_irq_handler(unsigned long data) > > if (status & GEN8_CTX_STATUS_ACTIVE_IDLE && > buf[2*head + 1] == PREEMPT_ID) { > - execlist_cancel_port_requests(execlists); > + execlists_cancel_port_requests(execlists); > > spin_lock_irq(&engine->timeline->lock); > unwind_incomplete_requests(engine); > @@ -870,6 +880,8 @@ static void intel_lrc_irq_handler(unsigned long data) > execlists->preempt) > continue; > > + port = execlists_port_head(execlists); > + > /* Check the context/desc id for this event matches */ > GEM_DEBUG_BUG_ON(buf[2 * head + 1] != port->context_id); > > @@ -890,7 +902,7 @@ static void intel_lrc_irq_handler(unsigned long data) > } > > /* After the final element, the hw should be idle */ > - GEM_BUG_ON(port_count(port) == 0 && > + GEM_BUG_ON(port_count(execlists_port_head(execlists)) == 0 && > !(status & GEN8_CTX_STATUS_ACTIVE_IDLE)); > } Can you try reworking this such that port is kept local without having to go back to the struct on every loop? And then compare code generation. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx