Commit f70de8d2 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915/gt: Track the context validity explicitly



Rather than assume if and only if the engine->default_state is not set
that the context is invalid, instead track when we know the context has
valid state -- either because we have copied the default_state or we
have completed a context switch to save the HW state.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Acked-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191203124155.3019926-1-chris@chris-wilson.co.uk
parent 49e74c8f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -147,6 +147,7 @@ static void __intel_context_retire(struct i915_active *active)
	GEM_TRACE("%s context:%llx retire\n",
		  ce->engine->name, ce->timeline->fence_context);

	set_bit(CONTEXT_VALID_BIT, &ce->flags);
	if (ce->state)
		__context_unpin_state(ce->state);

+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ struct intel_context {

	unsigned long flags;
#define CONTEXT_ALLOC_BIT 0
#define CONTEXT_VALID_BIT 1

	u32 *lrc_reg_state;
	u64 lrc_desc;
+1 −0
Original line number Diff line number Diff line
@@ -4102,6 +4102,7 @@ populate_lr_context(struct intel_context *ce,

		memcpy(vaddr, defaults, engine->context_size);
		i915_gem_object_unpin_map(engine->default_state);
		__set_bit(CONTEXT_VALID_BIT, &ce->flags);
		inhibit = false;
	}

+3 −1
Original line number Diff line number Diff line
@@ -1319,6 +1319,8 @@ static int ring_context_alloc(struct intel_context *ce)
			return PTR_ERR(vma);

		ce->state = vma;
		if (engine->default_state)
			__set_bit(CONTEXT_VALID_BIT, &ce->flags);
	}

	return 0;
@@ -1625,7 +1627,7 @@ static int switch_context(struct i915_request *rq)
	if (ce->state) {
		GEM_BUG_ON(rq->engine->id != RCS0);

		if (!rq->engine->default_state)
		if (!test_bit(CONTEXT_VALID_BIT, &ce->flags))
			hw_flags = MI_RESTORE_INHIBIT;

		ret = mi_set_context(rq, hw_flags);