[igt-dev] [PATCH i-g-t] tests/perf_pmu: Fix usage of for_each_engine_class_instance
Michel Thierry
michel.thierry at intel.com
Thu Mar 29 15:51:17 UTC 2018
On 29/03/18 02:11, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>
> Wrong file descriptor was passed to the iterator. This had currently no
> effect, since it wasn't used in the macro, but needs to be fixed.
>
> At the same time make the macro consistent by checking for engine presence
> like the other iterators do.
>
> Added __for_each_engine_class_instance which does not check for engine
> presence and so is useful for enumerating all possible engines - like for
> instance for subtest enumeration.
>
> And another 'wrong fd used' fixlet in the render node subtests.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Reported-by: Michel Thierry <michel.thierry at intel.com>
> Cc: Michel Thierry <michel.thierry at intel.com>
Thanks,
Reviewed-by: Michel Thierry <michel.thierry at intel.com>
> ---
> lib/igt_gt.h | 12 +++++++-----
> tests/perf_pmu.c | 30 ++++++++++--------------------
> 2 files changed, 17 insertions(+), 25 deletions(-)
>
> diff --git a/lib/igt_gt.h b/lib/igt_gt.h
> index a517ed7b29a0..d44b7552f3c4 100644
> --- a/lib/igt_gt.h
> +++ b/lib/igt_gt.h
> @@ -100,11 +100,6 @@ extern const struct intel_execution_engine2 {
> int instance;
> } intel_execution_engines2[];
>
> -#define for_each_engine_class_instance(fd__, e__) \
> - for ((e__) = intel_execution_engines2;\
> - (e__)->name; \
> - (e__)++)
> -
> unsigned int
> gem_class_instance_to_eb_flags(int gem_fd,
> enum drm_i915_gem_engine_class class,
> @@ -122,4 +117,11 @@ void gem_require_engine(int gem_fd,
> igt_require(gem_has_engine(gem_fd, class, instance));
> }
>
> +#define __for_each_engine_class_instance(fd__, e__) \
> + for ((e__) = intel_execution_engines2; (e__)->name; (e__)++)
> +
> +#define for_each_engine_class_instance(fd__, e__) \
> + for ((e__) = intel_execution_engines2; (e__)->name; (e__)++) \
> + for_if (gem_has_engine((fd__), (e__)->class, (e__)->instance))
> +
> #endif /* IGT_GT_H */
> diff --git a/tests/perf_pmu.c b/tests/perf_pmu.c
> index b59af81819c7..2273ddb9e684 100644
> --- a/tests/perf_pmu.c
> +++ b/tests/perf_pmu.c
> @@ -434,10 +434,8 @@ busy_check_all(int gem_fd, const struct intel_execution_engine2 *e,
>
> i = 0;
> fd[0] = -1;
> - for_each_engine_class_instance(fd, e_) {
> - if (!gem_has_engine(gem_fd, e_->class, e_->instance))
> - continue;
> - else if (e == e_)
> + for_each_engine_class_instance(gem_fd, e_) {
> + if (e == e_)
> busy_idx = i;
>
> fd[i++] = open_group(I915_PMU_ENGINE_BUSY(e_->class,
> @@ -499,10 +497,7 @@ most_busy_check_all(int gem_fd, const struct intel_execution_engine2 *e,
> unsigned int idle_idx, i;
>
> i = 0;
> - for_each_engine_class_instance(fd, e_) {
> - if (!gem_has_engine(gem_fd, e_->class, e_->instance))
> - continue;
> -
> + for_each_engine_class_instance(gem_fd, e_) {
> if (e == e_)
> idle_idx = i;
> else if (spin)
> @@ -559,10 +554,7 @@ all_busy_check_all(int gem_fd, const unsigned int num_engines,
> unsigned int i;
>
> i = 0;
> - for_each_engine_class_instance(fd, e) {
> - if (!gem_has_engine(gem_fd, e->class, e->instance))
> - continue;
> -
> + for_each_engine_class_instance(gem_fd, e) {
> if (spin)
> __submit_spin_batch(gem_fd, spin, e, 64);
> else
> @@ -1677,10 +1669,8 @@ igt_main
> igt_require_gem(fd);
> igt_require(i915_type_id() > 0);
>
> - for_each_engine_class_instance(fd, e) {
> - if (gem_has_engine(fd, e->class, e->instance))
> - num_engines++;
> - }
> + for_each_engine_class_instance(fd, e)
> + num_engines++;
> }
>
> /**
> @@ -1689,7 +1679,7 @@ igt_main
> igt_subtest("invalid-init")
> invalid_init();
>
> - for_each_engine_class_instance(fd, e) {
> + __for_each_engine_class_instance(fd, e) {
> const unsigned int pct[] = { 2, 50, 98 };
>
> /**
> @@ -1888,7 +1878,7 @@ igt_main
> gem_quiescent_gpu(fd);
> }
>
> - for_each_engine_class_instance(fd, e) {
> + __for_each_engine_class_instance(render_fd, e) {
> igt_subtest_group {
> igt_fixture {
> gem_require_engine(render_fd,
> @@ -1897,10 +1887,10 @@ igt_main
> }
>
> igt_subtest_f("render-node-busy-%s", e->name)
> - single(fd, e, TEST_BUSY);
> + single(render_fd, e, TEST_BUSY);
> igt_subtest_f("render-node-busy-idle-%s",
> e->name)
> - single(fd, e,
> + single(render_fd, e,
> TEST_BUSY | TEST_TRAILING_IDLE);
> }
> }
>
More information about the igt-dev
mailing list