Quoting Tvrtko Ursulin (2018-06-11 11:00:31) > > On 10/06/2018 20:43, Chris Wilson wrote: > > @@ -1585,11 +1607,14 @@ static int switch_context(struct i915_request *rq) > > > > to_mm->pd_dirty_rings &= ~intel_engine_flag(engine); > > engine->legacy_active_ppgtt = to_mm; > > - hw_flags = MI_FORCE_RESTORE; > > + > > + if (to_ctx == from_ctx) { > > Contexts can be the same here , when the parent condition is "if (to_mm > != from_mm || to_mm ...)" ? > > > + hw_flags = MI_FORCE_RESTORE; > > + from_ctx = NULL; > > Now on the error path we can end up with engine->legacy_active_context > == NULL, but commands to switch have been put to the ring. Is that OK? On the error path, we unwind the commands in the ring and will overwrite them with the next request (see i915_request_alloc() err_unwind:) So leaving legacy_active_context = NULL here just ensures we emit a context switch next time, no matter what. That is no bad thing as the HW ignores redundant MI_SET_CONTEXT (and requires the FORCE_RESTORE flag to force a redundant reload). -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx