Lines Matching full:engines

342 	struct i915_gem_proto_engine *engines;  member
371 if (set->engines[idx].type != I915_GEM_ENGINE_TYPE_INVALID) { in set_proto_ctx_engines_balance()
398 if (copy_from_user(&ci, &ext->engines[n], sizeof(ci))) { in set_proto_ctx_engines_balance()
416 set->engines[idx].type = I915_GEM_ENGINE_TYPE_PHYSICAL; in set_proto_ctx_engines_balance()
417 set->engines[idx].engine = siblings[0]; in set_proto_ctx_engines_balance()
420 set->engines[idx].type = I915_GEM_ENGINE_TYPE_BALANCED; in set_proto_ctx_engines_balance()
421 set->engines[idx].num_siblings = num_siblings; in set_proto_ctx_engines_balance()
422 set->engines[idx].siblings = siblings; in set_proto_ctx_engines_balance()
456 if (set->engines[idx].type == I915_GEM_ENGINE_TYPE_INVALID) { in set_proto_ctx_engines_bond()
461 if (set->engines[idx].type != I915_GEM_ENGINE_TYPE_PHYSICAL) { in set_proto_ctx_engines_bond()
463 "Bonding with virtual engines not allowed\n"); in set_proto_ctx_engines_bond()
501 if (copy_from_user(&ci, &ext->engines[n], sizeof(ci))) in set_proto_ctx_engines_bond()
536 drm_dbg(&i915->drm, "Cannot set engines twice"); in set_proto_ctx_engines()
541 !IS_ALIGNED(args->size - sizeof(*user), sizeof(*user->engines))) { in set_proto_ctx_engines()
547 set.num_engines = (args->size - sizeof(*user)) / sizeof(*user->engines); in set_proto_ctx_engines()
552 set.engines = kmalloc_array(set.num_engines, sizeof(*set.engines), GFP_KERNEL); in set_proto_ctx_engines()
553 if (!set.engines) in set_proto_ctx_engines()
560 if (copy_from_user(&ci, &user->engines[n], sizeof(ci))) { in set_proto_ctx_engines()
561 kfree(set.engines); in set_proto_ctx_engines()
565 memset(&set.engines[n], 0, sizeof(set.engines[n])); in set_proto_ctx_engines()
578 kfree(set.engines); in set_proto_ctx_engines()
582 set.engines[n].type = I915_GEM_ENGINE_TYPE_PHYSICAL; in set_proto_ctx_engines()
583 set.engines[n].engine = engine; in set_proto_ctx_engines()
593 kfree(set.engines); in set_proto_ctx_engines()
598 pc->user_engines = set.engines; in set_proto_ctx_engines()
820 if (!e->engines[count]) in __free_engines()
823 intel_context_put(e->engines[count]); in __free_engines()
835 struct i915_gem_engines *engines = in free_engines_rcu() local
838 i915_sw_fence_fini(&engines->fence); in free_engines_rcu()
839 free_engines(engines); in free_engines_rcu()
845 struct i915_gem_engines *engines = in engines_notify() local
846 container_of(fence, typeof(*engines), fence); in engines_notify()
850 if (!list_empty(&engines->link)) { in engines_notify()
851 struct i915_gem_context *ctx = engines->ctx; in engines_notify()
855 list_del(&engines->link); in engines_notify()
858 i915_gem_context_put(engines->ctx); in engines_notify()
862 init_rcu_head(&engines->rcu); in engines_notify()
863 call_rcu(&engines->rcu, free_engines_rcu); in engines_notify()
874 e = kzalloc(struct_size(e, engines, count), GFP_KERNEL); in alloc_engines()
903 GEM_BUG_ON(e->engines[engine->legacy_idx]); in default_engines()
911 e->engines[engine->legacy_idx] = ce; in default_engines()
969 e->engines[n] = ce; in user_engines()
1007 return rcu_dereference_protected(ctx->engines, true); in __context_engines_static()
1074 static void kill_engines(struct i915_gem_engines *engines, bool ban) in kill_engines() argument
1080 * Map the user's engine back to the actual engines; one virtual in kill_engines()
1081 * engine will be mapped to multiple engines, and using ctx->engine[] in kill_engines()
1084 * engines on which there are incomplete requests. in kill_engines()
1086 for_each_gem_engine(ce, engines, it) { in kill_engines()
1108 __reset_context(engines->ctx, engine); in kill_engines()
1120 list_for_each_entry_safe(pos, next, &ctx->stale.engines, link) { in kill_context()
1141 struct i915_gem_engines *engines) in engines_idle_release() argument
1146 INIT_LIST_HEAD(&engines->link); in engines_idle_release()
1148 engines->ctx = i915_gem_context_get(ctx); in engines_idle_release()
1150 for_each_gem_engine(ce, engines, it) { in engines_idle_release()
1159 err = i915_sw_fence_await_active(&engines->fence, in engines_idle_release()
1169 list_add_tail(&engines->link, &ctx->stale.engines); in engines_idle_release()
1173 if (list_empty(&engines->link)) /* raced, already closed */ in engines_idle_release()
1174 kill_engines(engines, true); in engines_idle_release()
1176 i915_sw_fence_commit(&engines->fence); in engines_idle_release()
1202 engines_idle_release(ctx, rcu_replace_pointer(ctx->engines, NULL, 1)); in context_close()
1287 struct i915_gem_engines *engines; in __context_engines_await() local
1291 engines = rcu_dereference(ctx->engines); in __context_engines_await()
1292 GEM_BUG_ON(!engines); in __context_engines_await()
1298 if (unlikely(!i915_sw_fence_await(&engines->fence))) in __context_engines_await()
1301 if (likely(engines == rcu_access_pointer(ctx->engines))) in __context_engines_await()
1304 i915_sw_fence_complete(&engines->fence); in __context_engines_await()
1308 return engines; in __context_engines_await()
1347 INIT_LIST_HEAD(&ctx->stale.engines); in i915_gem_create_context()
1382 RCU_INIT_POINTER(ctx->engines, e); in i915_gem_create_context()
2260 /* GEM context-engines iterator: for_each_gem_engine() */
2264 const struct i915_gem_engines *e = it->engines; in i915_gem_engines_iter_next()
2274 ctx = e->engines[it->idx++]; in i915_gem_engines_iter_next()