Skip to content

Commit

Permalink
drm/i915/guc: Don't send policy update for child contexts.
Browse files Browse the repository at this point in the history
The GuC FW applies the parent context policy to all the children,
so individual updates to the children are not supported and we
should not send them.

Note that sending the message did not have any functional consequences,
because the GuC just drops it and logs an error; since we were trying
to set the child policy to match the parent anyway the message being
dropped was not a problem.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <john.c.harrison@intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220728003339.2361010-1-daniele.ceraolospurio@intel.com
  • Loading branch information
Daniele Ceraolo Spurio authored and John Harrison committed Aug 1, 2022
1 parent dd9d3cb commit 6c82c75
Showing 1 changed file with 1 addition and 25 deletions.
26 changes: 1 addition & 25 deletions drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
Original file line number Diff line number Diff line change
Expand Up @@ -2420,7 +2420,6 @@ static int guc_context_policy_init_v70(struct intel_context *ce, bool loop)
struct context_policy policy;
u32 execution_quantum;
u32 preemption_timeout;
bool missing = false;
unsigned long flags;
int ret;

Expand All @@ -2438,32 +2437,9 @@ static int guc_context_policy_init_v70(struct intel_context *ce, bool loop)
__guc_context_policy_add_preempt_to_idle(&policy, 1);

ret = __guc_context_set_context_policies(guc, &policy, loop);
missing = ret != 0;

if (!missing && intel_context_is_parent(ce)) {
struct intel_context *child;

for_each_child(ce, child) {
__guc_context_policy_start_klv(&policy, child->guc_id.id);

if (engine->flags & I915_ENGINE_WANT_FORCED_PREEMPTION)
__guc_context_policy_add_preempt_to_idle(&policy, 1);

child->guc_state.prio = ce->guc_state.prio;
__guc_context_policy_add_priority(&policy, ce->guc_state.prio);
__guc_context_policy_add_execution_quantum(&policy, execution_quantum);
__guc_context_policy_add_preemption_timeout(&policy, preemption_timeout);

ret = __guc_context_set_context_policies(guc, &policy, loop);
if (ret) {
missing = true;
break;
}
}
}

spin_lock_irqsave(&ce->guc_state.lock, flags);
if (missing)
if (ret != 0)
set_context_policy_required(ce);
else
clr_context_policy_required(ce);
Expand Down

0 comments on commit 6c82c75

Please sign in to comment.