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: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris 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 207e4a71fb
)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
parent
c06aa1b438
commit
2e46a2a0b0
@ -574,7 +574,7 @@ static void engines_idle_release(struct i915_gem_context *ctx,
|
|||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
/* serialises with execbuf */
|
/* serialises with execbuf */
|
||||||
RCU_INIT_POINTER(ce->gem_context, NULL);
|
set_bit(CONTEXT_CLOSED_BIT, &ce->flags);
|
||||||
if (!intel_context_pin_if_active(ce))
|
if (!intel_context_pin_if_active(ce))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -2316,7 +2316,7 @@ static void eb_request_add(struct i915_execbuffer *eb)
|
|||||||
prev = __i915_request_commit(rq);
|
prev = __i915_request_commit(rq);
|
||||||
|
|
||||||
/* Check that the context wasn't destroyed before submission */
|
/* 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;
|
attr = eb->gem_context->sched;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -97,6 +97,8 @@ int __intel_context_do_pin(struct intel_context *ce)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
GEM_BUG_ON(intel_context_is_closed(ce));
|
||||||
|
|
||||||
if (unlikely(!test_bit(CONTEXT_ALLOC_BIT, &ce->flags))) {
|
if (unlikely(!test_bit(CONTEXT_ALLOC_BIT, &ce->flags))) {
|
||||||
err = intel_context_alloc_state(ce);
|
err = intel_context_alloc_state(ce);
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -173,6 +173,11 @@ static inline bool intel_context_is_barrier(const struct intel_context *ce)
|
|||||||
return test_bit(CONTEXT_BARRIER_BIT, &ce->flags);
|
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)
|
static inline bool intel_context_use_semaphores(const struct intel_context *ce)
|
||||||
{
|
{
|
||||||
return test_bit(CONTEXT_USE_SEMAPHORES, &ce->flags);
|
return test_bit(CONTEXT_USE_SEMAPHORES, &ce->flags);
|
||||||
|
@ -62,10 +62,11 @@ struct intel_context {
|
|||||||
#define CONTEXT_BARRIER_BIT 0
|
#define CONTEXT_BARRIER_BIT 0
|
||||||
#define CONTEXT_ALLOC_BIT 1
|
#define CONTEXT_ALLOC_BIT 1
|
||||||
#define CONTEXT_VALID_BIT 2
|
#define CONTEXT_VALID_BIT 2
|
||||||
#define CONTEXT_USE_SEMAPHORES 3
|
#define CONTEXT_CLOSED_BIT 3
|
||||||
#define CONTEXT_BANNED 4
|
#define CONTEXT_USE_SEMAPHORES 4
|
||||||
#define CONTEXT_FORCE_SINGLE_SUBMISSION 5
|
#define CONTEXT_BANNED 5
|
||||||
#define CONTEXT_NOPREEMPT 6
|
#define CONTEXT_FORCE_SINGLE_SUBMISSION 6
|
||||||
|
#define CONTEXT_NOPREEMPT 7
|
||||||
|
|
||||||
u32 *lrc_reg_state;
|
u32 *lrc_reg_state;
|
||||||
u64 lrc_desc;
|
u64 lrc_desc;
|
||||||
|
Loading…
Reference in New Issue
Block a user