Lines Matching full:engines

396 	struct i915_gem_proto_engine *engines;  member
425 if (set->engines[idx].type != I915_GEM_ENGINE_TYPE_INVALID) { in set_proto_ctx_engines_balance()
452 if (copy_from_user(&ci, &ext->engines[n], sizeof(ci))) { in set_proto_ctx_engines_balance()
470 set->engines[idx].type = I915_GEM_ENGINE_TYPE_PHYSICAL; in set_proto_ctx_engines_balance()
471 set->engines[idx].engine = siblings[0]; in set_proto_ctx_engines_balance()
474 set->engines[idx].type = I915_GEM_ENGINE_TYPE_BALANCED; in set_proto_ctx_engines_balance()
475 set->engines[idx].num_siblings = num_siblings; in set_proto_ctx_engines_balance()
476 set->engines[idx].siblings = siblings; in set_proto_ctx_engines_balance()
517 if (set->engines[idx].type == I915_GEM_ENGINE_TYPE_INVALID) { in set_proto_ctx_engines_bond()
522 if (set->engines[idx].type != I915_GEM_ENGINE_TYPE_PHYSICAL) { in set_proto_ctx_engines_bond()
524 "Bonding with virtual engines not allowed\n"); in set_proto_ctx_engines_bond()
562 if (copy_from_user(&ci, &ext->engines[n], sizeof(ci))) in set_proto_ctx_engines_bond()
616 if (set->engines[slot].type != I915_GEM_ENGINE_TYPE_INVALID) { in set_proto_ctx_engines_parallel_submit()
653 /* Create contexts / engines */ in set_proto_ctx_engines_parallel_submit()
661 if (copy_from_user(&ci, &ext->engines[n], sizeof(ci))) { in set_proto_ctx_engines_parallel_submit()
715 set->engines[slot].type = I915_GEM_ENGINE_TYPE_PARALLEL; in set_proto_ctx_engines_parallel_submit()
716 set->engines[slot].num_siblings = num_siblings; in set_proto_ctx_engines_parallel_submit()
717 set->engines[slot].width = width; in set_proto_ctx_engines_parallel_submit()
718 set->engines[slot].siblings = siblings; in set_proto_ctx_engines_parallel_submit()
748 drm_dbg(&i915->drm, "Cannot set engines twice"); in set_proto_ctx_engines()
753 !IS_ALIGNED(args->size - sizeof(*user), sizeof(*user->engines))) { in set_proto_ctx_engines()
759 set.num_engines = (args->size - sizeof(*user)) / sizeof(*user->engines); in set_proto_ctx_engines()
764 set.engines = kmalloc_array(set.num_engines, sizeof(*set.engines), GFP_KERNEL); in set_proto_ctx_engines()
765 if (!set.engines) in set_proto_ctx_engines()
772 if (copy_from_user(&ci, &user->engines[n], sizeof(ci))) { in set_proto_ctx_engines()
773 kfree(set.engines); in set_proto_ctx_engines()
777 memset(&set.engines[n], 0, sizeof(set.engines[n])); in set_proto_ctx_engines()
790 kfree(set.engines); in set_proto_ctx_engines()
794 set.engines[n].type = I915_GEM_ENGINE_TYPE_PHYSICAL; in set_proto_ctx_engines()
795 set.engines[n].engine = engine; in set_proto_ctx_engines()
805 kfree(set.engines); in set_proto_ctx_engines()
810 pc->user_engines = set.engines; in set_proto_ctx_engines()
1014 struct intel_context *ce = e->engines[count], *child; in __unpin_engines()
1033 if (!e->engines[count]) in __free_engines()
1036 intel_context_put(e->engines[count]); in __free_engines()
1048 struct i915_gem_engines *engines = in free_engines_rcu() local
1051 i915_sw_fence_fini(&engines->fence); in free_engines_rcu()
1052 free_engines(engines); in free_engines_rcu()
1056 struct i915_gem_engines *engines) in accumulate_runtime() argument
1065 for_each_gem_engine(ce, engines, it) { in accumulate_runtime()
1077 struct i915_gem_engines *engines = in engines_notify() local
1078 container_of(fence, typeof(*engines), fence); in engines_notify()
1079 struct i915_gem_context *ctx = engines->ctx; in engines_notify()
1083 if (!list_empty(&engines->link)) { in engines_notify()
1087 list_del(&engines->link); in engines_notify()
1090 accumulate_runtime(ctx->client, engines); in engines_notify()
1096 init_rcu_head(&engines->rcu); in engines_notify()
1097 call_rcu(&engines->rcu, free_engines_rcu); in engines_notify()
1108 e = kzalloc(struct_size(e, engines, count), GFP_KERNEL); in alloc_engines()
1136 GEM_BUG_ON(e->engines[engine->legacy_idx]); in default_engines()
1144 e->engines[engine->legacy_idx] = ce; in default_engines()
1242 e->engines[n] = ce; in user_engines()
1327 return rcu_dereference_protected(ctx->engines, true); in __context_engines_static()
1395 kill_engines(struct i915_gem_engines *engines, bool exit, bool persistent) in kill_engines() argument
1401 * Map the user's engine back to the actual engines; one virtual in kill_engines()
1402 * engine will be mapped to multiple engines, and using ctx->engine[] in kill_engines()
1405 * engines on which there are incomplete requests. in kill_engines()
1407 for_each_gem_engine(ce, engines, it) { in kill_engines()
1429 __reset_context(engines->ctx, engine); in kill_engines()
1439 list_for_each_entry_safe(pos, next, &ctx->stale.engines, link) { in kill_context()
1461 struct i915_gem_engines *engines) in engines_idle_release() argument
1466 INIT_LIST_HEAD(&engines->link); in engines_idle_release()
1468 engines->ctx = i915_gem_context_get(ctx); in engines_idle_release()
1470 for_each_gem_engine(ce, engines, it) { in engines_idle_release()
1479 err = i915_sw_fence_await_active(&engines->fence, in engines_idle_release()
1489 list_add_tail(&engines->link, &ctx->stale.engines); in engines_idle_release()
1493 if (list_empty(&engines->link)) /* raced, already closed */ in engines_idle_release()
1494 kill_engines(engines, true, in engines_idle_release()
1497 i915_sw_fence_commit(&engines->fence); in engines_idle_release()
1524 engines_idle_release(ctx, rcu_replace_pointer(ctx->engines, NULL, 1)); in context_close()
1626 INIT_LIST_HEAD(&ctx->stale.engines); in i915_gem_create_context()
1661 RCU_INIT_POINTER(ctx->engines, e); in i915_gem_create_context()
2675 /* GEM context-engines iterator: for_each_gem_engine() */
2679 const struct i915_gem_engines *e = it->engines; in i915_gem_engines_iter_next()
2689 ctx = e->engines[it->idx++]; in i915_gem_engines_iter_next()