Commit 2e46a2a0 authored by Chris Wilson's avatar Chris Wilson Committed by Rodrigo Vivi
Browse files

drm/i915: Use explicit flag to mark unreachable intel_context



I need to keep the GEM context around a bit longer so adding an explicit
flag for syncing execbuf with closed/abandonded contexts.

v2:
 * Use already available context flags. (Chris)

Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200319170707.8262-1-chris@chris-wilson.co.uk


(cherry picked from commit 207e4a71)
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent c06aa1b4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -574,7 +574,7 @@ static void engines_idle_release(struct i915_gem_context *ctx,
		int err = 0;

		/* serialises with execbuf */
		RCU_INIT_POINTER(ce->gem_context, NULL);
		set_bit(CONTEXT_CLOSED_BIT, &ce->flags);
		if (!intel_context_pin_if_active(ce))
			continue;

+1 −1
Original line number Diff line number Diff line
@@ -2316,7 +2316,7 @@ static void eb_request_add(struct i915_execbuffer *eb)
	prev = __i915_request_commit(rq);

	/* Check that the context wasn't destroyed before submission */
	if (likely(rcu_access_pointer(eb->context->gem_context))) {
	if (likely(!intel_context_is_closed(eb->context))) {
		attr = eb->gem_context->sched;

		/*
+2 −0
Original line number Diff line number Diff line
@@ -97,6 +97,8 @@ int __intel_context_do_pin(struct intel_context *ce)
{
	int err;

	GEM_BUG_ON(intel_context_is_closed(ce));

	if (unlikely(!test_bit(CONTEXT_ALLOC_BIT, &ce->flags))) {
		err = intel_context_alloc_state(ce);
		if (err)
+5 −0
Original line number Diff line number Diff line
@@ -173,6 +173,11 @@ static inline bool intel_context_is_barrier(const struct intel_context *ce)
	return test_bit(CONTEXT_BARRIER_BIT, &ce->flags);
}

static inline bool intel_context_is_closed(const struct intel_context *ce)
{
	return test_bit(CONTEXT_CLOSED_BIT, &ce->flags);
}

static inline bool intel_context_use_semaphores(const struct intel_context *ce)
{
	return test_bit(CONTEXT_USE_SEMAPHORES, &ce->flags);
+5 −4
Original line number Diff line number Diff line
@@ -62,10 +62,11 @@ struct intel_context {
#define CONTEXT_BARRIER_BIT		0
#define CONTEXT_ALLOC_BIT		1
#define CONTEXT_VALID_BIT		2
#define CONTEXT_USE_SEMAPHORES		3
#define CONTEXT_BANNED			4
#define CONTEXT_FORCE_SINGLE_SUBMISSION	5
#define CONTEXT_NOPREEMPT		6
#define CONTEXT_CLOSED_BIT		3
#define CONTEXT_USE_SEMAPHORES		4
#define CONTEXT_BANNED			5
#define CONTEXT_FORCE_SINGLE_SUBMISSION	6
#define CONTEXT_NOPREEMPT		7

	u32 *lrc_reg_state;
	u64 lrc_desc;