[Intel-gfx] [PATCH 02/17] drm/i915/ringbuffer: Brute force context restore
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Jun 11 10:23:53 UTC 2018
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
More information about the Intel-gfx
mailing list