Lines Matching full:engines
393 struct i915_gem_proto_engine *engines; member
422 if (set->engines[idx].type != I915_GEM_ENGINE_TYPE_INVALID) { in set_proto_ctx_engines_balance()
449 if (copy_from_user(&ci, &ext->engines[n], sizeof(ci))) { in set_proto_ctx_engines_balance()
467 set->engines[idx].type = I915_GEM_ENGINE_TYPE_PHYSICAL; in set_proto_ctx_engines_balance()
468 set->engines[idx].engine = siblings[0]; in set_proto_ctx_engines_balance()
471 set->engines[idx].type = I915_GEM_ENGINE_TYPE_BALANCED; in set_proto_ctx_engines_balance()
472 set->engines[idx].num_siblings = num_siblings; in set_proto_ctx_engines_balance()
473 set->engines[idx].siblings = siblings; in set_proto_ctx_engines_balance()
514 if (set->engines[idx].type == I915_GEM_ENGINE_TYPE_INVALID) { in set_proto_ctx_engines_bond()
519 if (set->engines[idx].type != I915_GEM_ENGINE_TYPE_PHYSICAL) { in set_proto_ctx_engines_bond()
521 "Bonding with virtual engines not allowed\n"); in set_proto_ctx_engines_bond()
559 if (copy_from_user(&ci, &ext->engines[n], sizeof(ci))) in set_proto_ctx_engines_bond()
613 if (set->engines[slot].type != I915_GEM_ENGINE_TYPE_INVALID) { in set_proto_ctx_engines_parallel_submit()
650 /* Create contexts / engines */ in set_proto_ctx_engines_parallel_submit()
658 if (copy_from_user(&ci, &ext->engines[n], sizeof(ci))) { in set_proto_ctx_engines_parallel_submit()
712 set->engines[slot].type = I915_GEM_ENGINE_TYPE_PARALLEL; in set_proto_ctx_engines_parallel_submit()
713 set->engines[slot].num_siblings = num_siblings; in set_proto_ctx_engines_parallel_submit()
714 set->engines[slot].width = width; in set_proto_ctx_engines_parallel_submit()
715 set->engines[slot].siblings = siblings; in set_proto_ctx_engines_parallel_submit()
745 drm_dbg(&i915->drm, "Cannot set engines twice"); in set_proto_ctx_engines()
750 !IS_ALIGNED(args->size - sizeof(*user), sizeof(*user->engines))) { in set_proto_ctx_engines()
756 set.num_engines = (args->size - sizeof(*user)) / sizeof(*user->engines); in set_proto_ctx_engines()
761 set.engines = kmalloc_array(set.num_engines, sizeof(*set.engines), GFP_KERNEL); in set_proto_ctx_engines()
762 if (!set.engines) in set_proto_ctx_engines()
769 if (copy_from_user(&ci, &user->engines[n], sizeof(ci))) { in set_proto_ctx_engines()
770 kfree(set.engines); in set_proto_ctx_engines()
774 memset(&set.engines[n], 0, sizeof(set.engines[n])); in set_proto_ctx_engines()
787 kfree(set.engines); in set_proto_ctx_engines()
791 set.engines[n].type = I915_GEM_ENGINE_TYPE_PHYSICAL; in set_proto_ctx_engines()
792 set.engines[n].engine = engine; in set_proto_ctx_engines()
802 kfree(set.engines); in set_proto_ctx_engines()
807 pc->user_engines = set.engines; in set_proto_ctx_engines()
999 struct intel_context *ce = e->engines[count], *child; in __unpin_engines()
1018 if (!e->engines[count]) in __free_engines()
1021 intel_context_put(e->engines[count]); in __free_engines()
1033 struct i915_gem_engines *engines = in free_engines_rcu() local
1036 i915_sw_fence_fini(&engines->fence); in free_engines_rcu()
1037 free_engines(engines); in free_engines_rcu()
1041 struct i915_gem_engines *engines) in accumulate_runtime() argument
1050 for_each_gem_engine(ce, engines, it) { in accumulate_runtime()
1062 struct i915_gem_engines *engines = in engines_notify() local
1063 container_of(fence, typeof(*engines), fence); in engines_notify()
1064 struct i915_gem_context *ctx = engines->ctx; in engines_notify()
1068 if (!list_empty(&engines->link)) { in engines_notify()
1072 list_del(&engines->link); in engines_notify()
1075 accumulate_runtime(ctx->client, engines); in engines_notify()
1081 init_rcu_head(&engines->rcu); in engines_notify()
1082 call_rcu(&engines->rcu, free_engines_rcu); in engines_notify()
1093 e = kzalloc(struct_size(e, engines, count), GFP_KERNEL); in alloc_engines()
1121 GEM_BUG_ON(e->engines[engine->legacy_idx]); in default_engines()
1129 e->engines[engine->legacy_idx] = ce; in default_engines()
1227 e->engines[n] = ce; in user_engines()
1312 return rcu_dereference_protected(ctx->engines, true); in __context_engines_static()
1380 kill_engines(struct i915_gem_engines *engines, bool exit, bool persistent) in kill_engines() argument
1386 * Map the user's engine back to the actual engines; one virtual in kill_engines()
1387 * engine will be mapped to multiple engines, and using ctx->engine[] in kill_engines()
1390 * engines on which there are incomplete requests. in kill_engines()
1392 for_each_gem_engine(ce, engines, it) { in kill_engines()
1414 __reset_context(engines->ctx, engine); in kill_engines()
1424 list_for_each_entry_safe(pos, next, &ctx->stale.engines, link) { in kill_context()
1446 struct i915_gem_engines *engines) in engines_idle_release() argument
1451 INIT_LIST_HEAD(&engines->link); in engines_idle_release()
1453 engines->ctx = i915_gem_context_get(ctx); in engines_idle_release()
1455 for_each_gem_engine(ce, engines, it) { in engines_idle_release()
1464 err = i915_sw_fence_await_active(&engines->fence, in engines_idle_release()
1474 list_add_tail(&engines->link, &ctx->stale.engines); in engines_idle_release()
1478 if (list_empty(&engines->link)) /* raced, already closed */ in engines_idle_release()
1479 kill_engines(engines, true, in engines_idle_release()
1482 i915_sw_fence_commit(&engines->fence); in engines_idle_release()
1509 engines_idle_release(ctx, rcu_replace_pointer(ctx->engines, NULL, 1)); in context_close()
1611 INIT_LIST_HEAD(&ctx->stale.engines); in i915_gem_create_context()
1642 RCU_INIT_POINTER(ctx->engines, e); in i915_gem_create_context()
2562 /* GEM context-engines iterator: for_each_gem_engine() */
2566 const struct i915_gem_engines *e = it->engines; in i915_gem_engines_iter_next()
2576 ctx = e->engines[it->idx++]; in i915_gem_engines_iter_next()