Message ID | 20211004220637.14746-10-matthew.brost@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Parallel submission aka multi-bb execbuf | expand |
On 10/4/2021 15:06, Matthew Brost wrote: > In GuC parent-child contexts the parent context controls the scheduling, > ensure only the parent does the scheduling operations. > > Signed-off-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: John Harrison <John.C.Harrison@Intel.com> > --- > drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c > index ab6d7fc1b0b1..1f2809187513 100644 > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c > @@ -324,6 +324,12 @@ static inline void decr_context_committed_requests(struct intel_context *ce) > GEM_BUG_ON(ce->guc_state.number_committed_requests < 0); > } > > +static struct intel_context * > +request_to_scheduling_context(struct i915_request *rq) > +{ > + return intel_context_to_parent(rq->context); > +} > + > static inline bool context_guc_id_invalid(struct intel_context *ce) > { > return ce->guc_id.id == GUC_INVALID_LRC_ID; > @@ -1710,6 +1716,7 @@ static void __guc_context_sched_disable(struct intel_guc *guc, > > GEM_BUG_ON(guc_id == GUC_INVALID_LRC_ID); > > + GEM_BUG_ON(intel_context_is_child(ce)); > trace_intel_context_sched_disable(ce); > > guc_submission_send_busy_loop(guc, action, ARRAY_SIZE(action), > @@ -1935,6 +1942,8 @@ static void guc_context_sched_disable(struct intel_context *ce) > intel_wakeref_t wakeref; > u16 guc_id; > > + GEM_BUG_ON(intel_context_is_child(ce)); > + > spin_lock_irqsave(&ce->guc_state.lock, flags); > > /* > @@ -2303,6 +2312,8 @@ static void guc_signal_context_fence(struct intel_context *ce) > { > unsigned long flags; > > + GEM_BUG_ON(intel_context_is_child(ce)); > + > spin_lock_irqsave(&ce->guc_state.lock, flags); > clr_context_wait_for_deregister_to_register(ce); > __guc_signal_context_fence(ce); > @@ -2333,7 +2344,7 @@ static void guc_context_init(struct intel_context *ce) > > static int guc_request_alloc(struct i915_request *rq) > { > - struct intel_context *ce = rq->context; > + struct intel_context *ce = request_to_scheduling_context(rq); > struct intel_guc *guc = ce_to_guc(ce); > unsigned long flags; > int ret;
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c index ab6d7fc1b0b1..1f2809187513 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c @@ -324,6 +324,12 @@ static inline void decr_context_committed_requests(struct intel_context *ce) GEM_BUG_ON(ce->guc_state.number_committed_requests < 0); } +static struct intel_context * +request_to_scheduling_context(struct i915_request *rq) +{ + return intel_context_to_parent(rq->context); +} + static inline bool context_guc_id_invalid(struct intel_context *ce) { return ce->guc_id.id == GUC_INVALID_LRC_ID; @@ -1710,6 +1716,7 @@ static void __guc_context_sched_disable(struct intel_guc *guc, GEM_BUG_ON(guc_id == GUC_INVALID_LRC_ID); + GEM_BUG_ON(intel_context_is_child(ce)); trace_intel_context_sched_disable(ce); guc_submission_send_busy_loop(guc, action, ARRAY_SIZE(action), @@ -1935,6 +1942,8 @@ static void guc_context_sched_disable(struct intel_context *ce) intel_wakeref_t wakeref; u16 guc_id; + GEM_BUG_ON(intel_context_is_child(ce)); + spin_lock_irqsave(&ce->guc_state.lock, flags); /* @@ -2303,6 +2312,8 @@ static void guc_signal_context_fence(struct intel_context *ce) { unsigned long flags; + GEM_BUG_ON(intel_context_is_child(ce)); + spin_lock_irqsave(&ce->guc_state.lock, flags); clr_context_wait_for_deregister_to_register(ce); __guc_signal_context_fence(ce); @@ -2333,7 +2344,7 @@ static void guc_context_init(struct intel_context *ce) static int guc_request_alloc(struct i915_request *rq) { - struct intel_context *ce = rq->context; + struct intel_context *ce = request_to_scheduling_context(rq); struct intel_guc *guc = ce_to_guc(ce); unsigned long flags; int ret;
In GuC parent-child contexts the parent context controls the scheduling, ensure only the parent does the scheduling operations. Signed-off-by: Matthew Brost <matthew.brost@intel.com> --- drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)