Re: [PATCH 02/17] drm/i915/ringbuffer: Brute force context restore

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 11/06/2018 11:04, Chris Wilson wrote:
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).

But we don't set MI_FORCE_RESTORE if the old context is equal to new one, since we discarded information about the previous one?

Regards,

Tvrtko

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux