From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> Where engine discovery and context engine map are not supported we must not call the asserting gem_class_instance_to_eb_flags from the engine list initalizer. (Since not all engines can be addressed using the legacy execbuf API.) Instead extract the code into lower level __gem_class_instance_to_eb_flags helper which can return errors the caller can manually handle then. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> Cc: Andi Shyti <andi.shyti@xxxxxxxxx> --- lib/i915/gem_engine_topology.c | 17 +++++++++++++---- lib/igt_gt.c | 28 +++++++++++++++++++--------- lib/igt_gt.h | 5 +++++ 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/lib/i915/gem_engine_topology.c b/lib/i915/gem_engine_topology.c index d0c8bd5aaeac..1748231a1de0 100644 --- a/lib/i915/gem_engine_topology.c +++ b/lib/i915/gem_engine_topology.c @@ -222,15 +222,24 @@ struct intel_engine_data intel_init_engine_list(int fd, uint32_t ctx_id) __for_each_static_engine(e2) { struct intel_execution_engine2 *__e2 = &engine_data.engines[engine_data.nengines]; + int flags; + + flags = __gem_class_instance_to_eb_flags(fd, + e2->class, + e2->instance); + + __e2->flags = flags; if (!igt_only_list_subtests()) { - __e2->flags = gem_class_instance_to_eb_flags(fd, - e2->class, e2->instance); + /* + * Skip engines not suported with legacy + * execbuf. + */ + if (flags < 0) + continue; if (!gem_has_ring(fd, __e2->flags)) continue; - } else { - __e2->flags = -1; /* 0xfff... */ } __e2->name = e2->name; diff --git a/lib/igt_gt.c b/lib/igt_gt.c index 6b7c037e6d10..1a81a1fb405f 100644 --- a/lib/igt_gt.c +++ b/lib/igt_gt.c @@ -611,15 +611,13 @@ int gem_execbuf_flags_to_engine_class(unsigned int flags) } } -unsigned int -gem_class_instance_to_eb_flags(int gem_fd, - enum drm_i915_gem_engine_class class, - unsigned int instance) +int +__gem_class_instance_to_eb_flags(int gem_fd, + enum drm_i915_gem_engine_class class, + unsigned int instance) { - if (class != I915_ENGINE_CLASS_VIDEO) - igt_assert(instance == 0); - else - igt_assert(instance >= 0 && instance <= 1); + if (instance > 1 || (class != I915_ENGINE_CLASS_VIDEO && instance > 0)) + return -1; switch (class) { case I915_ENGINE_CLASS_RENDER: @@ -640,10 +638,22 @@ gem_class_instance_to_eb_flags(int gem_fd, return I915_EXEC_VEBOX; case I915_ENGINE_CLASS_INVALID: default: - igt_assert(0); + return -1; }; } +unsigned int +gem_class_instance_to_eb_flags(int gem_fd, + enum drm_i915_gem_engine_class class, + unsigned int instance) +{ + int flags = __gem_class_instance_to_eb_flags(gem_fd, class, instance); + + igt_assert(flags >= 0); + + return flags; +} + bool gem_has_engine(int gem_fd, enum drm_i915_gem_engine_class class, unsigned int instance) diff --git a/lib/igt_gt.h b/lib/igt_gt.h index 77318e2a82b8..189b9bf70a8b 100644 --- a/lib/igt_gt.h +++ b/lib/igt_gt.h @@ -102,6 +102,11 @@ extern const struct intel_execution_engine2 { int gem_execbuf_flags_to_engine_class(unsigned int flags); +int +__gem_class_instance_to_eb_flags(int gem_fd, + enum drm_i915_gem_engine_class class, + unsigned int instance); + unsigned int gem_class_instance_to_eb_flags(int gem_fd, enum drm_i915_gem_engine_class class, -- 2.20.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx