Lines Matching refs:pc

195 				struct i915_gem_proto_context *pc)
199 if (pc->pxp_wakeref)
200 intel_runtime_pm_put(&i915->runtime_pm, pc->pxp_wakeref);
201 if (pc->vm)
202 i915_vm_put(pc->vm);
203 if (pc->user_engines) {
204 for (i = 0; i < pc->num_user_engines; i++)
205 kfree(pc->user_engines[i].siblings);
206 kfree(pc->user_engines);
208 kfree(pc);
212 struct i915_gem_proto_context *pc,
224 pc->user_flags |= BIT(UCONTEXT_PERSISTENCE);
246 pc->user_flags &= ~BIT(UCONTEXT_PERSISTENCE);
253 struct i915_gem_proto_context *pc,
259 pc->uses_protected_content = false;
262 } else if ((pc->user_flags & BIT(UCONTEXT_RECOVERABLE)) ||
263 !(pc->user_flags & BIT(UCONTEXT_BANNABLE))) {
266 pc->uses_protected_content = true;
272 pc->pxp_wakeref = intel_runtime_pm_get(&i915->runtime_pm);
285 struct i915_gem_proto_context *pc, *err;
287 pc = kzalloc(sizeof(*pc), GFP_KERNEL);
288 if (!pc)
291 pc->fpriv = fpriv;
292 pc->num_user_engines = -1;
293 pc->user_engines = NULL;
294 pc->user_flags = BIT(UCONTEXT_BANNABLE) |
297 pc->user_flags |= BIT(UCONTEXT_PERSISTENCE);
298 pc->sched.priority = I915_PRIORITY_NORMAL;
305 pc->single_timeline = true;
308 return pc;
311 proto_context_close(i915, pc);
316 struct i915_gem_proto_context *pc,
328 old = xa_store(&fpriv->proto_context_xa, *id, pc, GFP_KERNEL);
339 struct i915_gem_proto_context *pc,
345 ret = proto_context_register_locked(fpriv, pc, id);
366 struct i915_gem_proto_context *pc,
385 if (pc->vm)
386 i915_vm_put(pc->vm);
387 pc->vm = vm;
735 struct i915_gem_proto_context *pc,
746 if (pc->num_user_engines >= 0) {
808 pc->num_user_engines = set.num_engines;
809 pc->user_engines = set.engines;
815 struct i915_gem_proto_context *pc,
839 if (!!(user_sseu.flags & I915_CONTEXT_SSEU_FLAG_ENGINE_INDEX) != (pc->num_user_engines >= 0))
842 if (pc->num_user_engines >= 0) {
846 if (idx >= pc->num_user_engines)
849 idx = array_index_nospec(idx, pc->num_user_engines);
850 pe = &pc->user_engines[idx];
866 sseu = &pc->legacy_rcs_sseu;
879 struct i915_gem_proto_context *pc,
890 pc->user_flags |= BIT(UCONTEXT_NO_ERROR_CAPTURE);
892 pc->user_flags &= ~BIT(UCONTEXT_NO_ERROR_CAPTURE);
901 pc->user_flags |= BIT(UCONTEXT_BANNABLE);
902 else if (pc->uses_protected_content)
905 pc->user_flags &= ~BIT(UCONTEXT_BANNABLE);
910 pc->user_flags |= BIT(UCONTEXT_LOW_LATENCY);
919 pc->user_flags &= ~BIT(UCONTEXT_RECOVERABLE);
920 else if (pc->uses_protected_content)
923 pc->user_flags |= BIT(UCONTEXT_RECOVERABLE);
929 pc->sched.priority = args->value;
933 ret = set_proto_ctx_sseu(fpriv, pc, args);
937 ret = set_proto_ctx_vm(fpriv, pc, args);
941 ret = set_proto_ctx_engines(fpriv, pc, args);
948 ret = proto_context_set_persistence(fpriv->i915, pc,
953 ret = proto_context_set_protected(fpriv->i915, pc,
1604 const struct i915_gem_proto_context *pc)
1618 ctx->sched = pc->sched;
1626 if (pc->vm) {
1627 vm = i915_vm_get(pc->vm);
1638 ppgtt->vm.fpriv = pc->fpriv;
1645 ctx->user_flags = pc->user_flags;
1648 if (pc->num_user_engines >= 0) {
1650 e = user_engines(ctx, pc->num_user_engines, pc->user_engines);
1653 e = default_engines(ctx, pc->legacy_rcs_sseu);
1672 if (pc->single_timeline) {
1680 if (pc->uses_protected_content) {
1746 struct i915_gem_proto_context *pc;
1759 pc = proto_context_create(file_priv, i915, 0);
1760 if (IS_ERR(pc)) {
1761 err = PTR_ERR(pc);
1765 ctx = i915_gem_create_context(i915, pc);
1766 proto_context_close(i915, pc);
1787 struct i915_gem_proto_context *pc;
1792 xa_for_each(&file_priv->proto_context_xa, idx, pc)
1793 proto_context_close(file_priv->i915, pc);
2174 struct i915_gem_proto_context *pc;
2189 return set_proto_ctx_param(arg->fpriv, arg->pc, &local.param);
2223 struct i915_gem_proto_context *pc, u32 id)
2230 ctx = i915_gem_create_context(file_priv->i915, pc);
2246 GEM_BUG_ON(old != pc);
2247 proto_context_close(file_priv->i915, pc);
2255 struct i915_gem_proto_context *pc;
2266 pc = xa_load(&file_priv->proto_context_xa, id);
2267 if (!pc)
2270 ctx = finalize_create_context_locked(file_priv, pc, id);
2304 ext_data.pc = proto_context_create(file->driver_priv, i915,
2306 if (IS_ERR(ext_data.pc))
2307 return PTR_ERR(ext_data.pc);
2327 ctx = i915_gem_create_context(i915, ext_data.pc);
2333 proto_context_close(i915, ext_data.pc);
2336 ret = proto_context_register(ext_data.fpriv, ext_data.pc, &id);
2346 proto_context_close(i915, ext_data.pc);
2355 struct i915_gem_proto_context *pc;
2369 pc = xa_erase(&file_priv->proto_context_xa, args->ctx_id);
2372 if (!ctx && !pc)
2374 GEM_WARN_ON(ctx && pc);
2376 if (pc)
2377 proto_context_close(file_priv->i915, pc);
2517 struct i915_gem_proto_context *pc;
2524 pc = xa_load(&file_priv->proto_context_xa, args->ctx_id);
2525 if (pc) {
2531 ret = set_proto_ctx_param(file_priv, pc, args);