Port tests that take GT as argument or otherwise depend on a specific GT to work to correctly check every GT on system.
This patch addresses the test suites that only really needed to have the test calls wrapped inside for_each_gt with little to no other intervention. Signed-off-by: Krzysztof Niemiec <[email protected]> --- Note that the mock device related tests haven't been touched. This is because the mock device is hard-coded to have a single GT, so to_gt() will always be correct. At this moment the single GT assumption is reasonable to make from the perspective of the test developer, and changing those to handle multi-gt mock devices is IMO out of scope and should be done if/when mock devices are expanded to have multiple GTs. Maybe it's worth it to annotate the places where the single GT assumption is made for mock devices? .../drm/i915/gem/selftests/i915_gem_migrate.c | 11 +++++- drivers/gpu/drm/i915/gt/selftest_context.c | 16 ++++++-- drivers/gpu/drm/i915/gt/selftest_engine.c | 15 +++++--- drivers/gpu/drm/i915/gt/selftest_engine_cs.c | 15 ++++++-- .../drm/i915/gt/selftest_engine_heartbeat.c | 22 +++++++---- drivers/gpu/drm/i915/gt/selftest_execlists.c | 19 +++++++--- drivers/gpu/drm/i915/gt/selftest_gt_pm.c | 15 ++++++-- drivers/gpu/drm/i915/gt/selftest_hangcheck.c | 24 +++++++----- drivers/gpu/drm/i915/gt/selftest_lrc.c | 11 +++++- drivers/gpu/drm/i915/gt/selftest_migrate.c | 38 +++++++++++++------ drivers/gpu/drm/i915/gt/selftest_mocs.c | 11 +++++- drivers/gpu/drm/i915/gt/selftest_reset.c | 20 +++++++--- .../drm/i915/gt/selftest_ring_submission.c | 15 ++++++-- drivers/gpu/drm/i915/gt/selftest_timeline.c | 15 ++++++-- .../gpu/drm/i915/gt/selftest_workarounds.c | 15 ++++++-- drivers/gpu/drm/i915/gt/uc/selftest_guc.c | 20 +++++++--- .../drm/i915/gt/uc/selftest_guc_hangcheck.c | 20 +++++++--- .../drm/i915/gt/uc/selftest_guc_multi_lrc.c | 20 +++++++--- .../gpu/drm/i915/selftests/i915_gem_evict.c | 15 ++++++-- drivers/gpu/drm/i915/selftests/intel_uncore.c | 11 +++++- 20 files changed, 260 insertions(+), 88 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c index d8f4a10d71de..3d4ffca8087c 100644 --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c @@ -520,9 +520,18 @@ int i915_gem_migrate_live_selftests(struct drm_i915_private *i915) SUBTEST(igt_lmem_pages_failsafe_migrate), SUBTEST(igt_lmem_async_migrate), }; + struct intel_gt *gt; + unsigned int id; + int err; if (!HAS_LMEM(i915)) return 0; - return intel_gt_live_subtests(tests, to_gt(i915)); + for_each_gt(gt, i915, id) { + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c b/drivers/gpu/drm/i915/gt/selftest_context.c index ab76703f6e8b..ae56b410a320 100644 --- a/drivers/gpu/drm/i915/gt/selftest_context.c +++ b/drivers/gpu/drm/i915/gt/selftest_context.c @@ -446,10 +446,18 @@ int intel_context_live_selftests(struct drm_i915_private *i915) SUBTEST(live_active_context), SUBTEST(live_remote_context), }; - struct intel_gt *gt = to_gt(i915); + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(gt)) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; + + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } - return intel_gt_live_subtests(tests, gt); + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_engine.c b/drivers/gpu/drm/i915/gt/selftest_engine.c index 57fea9ea1705..bd96db071859 100644 --- a/drivers/gpu/drm/i915/gt/selftest_engine.c +++ b/drivers/gpu/drm/i915/gt/selftest_engine.c @@ -12,15 +12,18 @@ int intel_engine_live_selftests(struct drm_i915_private *i915) live_engine_pm_selftests, NULL, }; - struct intel_gt *gt = to_gt(i915); + struct intel_gt *gt; typeof(*tests) *fn; + unsigned int id; - for (fn = tests; *fn; fn++) { - int err; + for_each_gt(gt, i915, id) { + for (fn = tests; *fn; fn++) { + int err; - err = (*fn)(gt); - if (err) - return err; + err = (*fn)(gt); + if (err) + return err; + } } return 0; diff --git a/drivers/gpu/drm/i915/gt/selftest_engine_cs.c b/drivers/gpu/drm/i915/gt/selftest_engine_cs.c index 5ffa5e30f419..99348395b92b 100644 --- a/drivers/gpu/drm/i915/gt/selftest_engine_cs.c +++ b/drivers/gpu/drm/i915/gt/selftest_engine_cs.c @@ -380,11 +380,20 @@ int intel_engine_cs_perf_selftests(struct drm_i915_private *i915) SUBTEST(perf_mi_bb_start), SUBTEST(perf_mi_noop), }; + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(to_gt(i915))) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; - return intel_gt_live_subtests(tests, to_gt(i915)); + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } static int intel_mmio_bases_check(void *arg) diff --git a/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c b/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c index b893a8fde895..933f30d250c7 100644 --- a/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c +++ b/drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.c @@ -266,18 +266,26 @@ int intel_heartbeat_live_selftests(struct drm_i915_private *i915) SUBTEST(live_heartbeat_off), }; int saved_hangcheck; + struct intel_gt *gt; + unsigned int id; int err; - if (intel_gt_is_wedged(to_gt(i915))) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; - saved_hangcheck = i915->params.enable_hangcheck; - i915->params.enable_hangcheck = INT_MAX; + saved_hangcheck = i915->params.enable_hangcheck; + i915->params.enable_hangcheck = INT_MAX; - err = intel_gt_live_subtests(tests, to_gt(i915)); + err = intel_gt_live_subtests(tests, gt); - i915->params.enable_hangcheck = saved_hangcheck; - return err; + i915->params.enable_hangcheck = saved_hangcheck; + + if (err) + return err; + } + + return 0; } void st_engine_heartbeat_disable(struct intel_engine_cs *engine) diff --git a/drivers/gpu/drm/i915/gt/selftest_execlists.c b/drivers/gpu/drm/i915/gt/selftest_execlists.c index 21e5ed9f72a3..ddf71b3784bf 100644 --- a/drivers/gpu/drm/i915/gt/selftest_execlists.c +++ b/drivers/gpu/drm/i915/gt/selftest_execlists.c @@ -4495,12 +4495,21 @@ int intel_execlists_live_selftests(struct drm_i915_private *i915) SUBTEST(live_virtual_slice), SUBTEST(live_virtual_reset), }; + struct intel_gt *gt; + unsigned int id; + int err; - if (to_gt(i915)->submission_method != INTEL_SUBMISSION_ELSP) - return 0; + for_each_gt(gt, i915, id) { + if (gt->submission_method != INTEL_SUBMISSION_ELSP) + continue; - if (intel_gt_is_wedged(to_gt(i915))) - return 0; + if (intel_gt_is_wedged(gt)) + continue; - return intel_gt_live_subtests(tests, to_gt(i915)); + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_gt_pm.c b/drivers/gpu/drm/i915/gt/selftest_gt_pm.c index 07eaf71955c4..09c0c4096665 100644 --- a/drivers/gpu/drm/i915/gt/selftest_gt_pm.c +++ b/drivers/gpu/drm/i915/gt/selftest_gt_pm.c @@ -205,9 +205,18 @@ int intel_gt_pm_late_selftests(struct drm_i915_private *i915) */ SUBTEST(live_rc6_ctx_wa), }; + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(to_gt(i915))) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; - return intel_gt_live_subtests(tests, to_gt(i915)); + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c index 53f3ce5c33a4..d67a6d75c56a 100644 --- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c +++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c @@ -2016,21 +2016,27 @@ int intel_hangcheck_live_selftests(struct drm_i915_private *i915) SUBTEST(igt_reset_evict_fence), SUBTEST(igt_handle_error), }; - struct intel_gt *gt = to_gt(i915); intel_wakeref_t wakeref; + struct intel_gt *gt; + unsigned int id; int err; - if (!intel_has_gpu_reset(gt)) - return 0; + for_each_gt(gt, i915, id) { + if (!intel_has_gpu_reset(gt)) + continue; - if (intel_gt_is_wedged(gt)) - return -EIO; /* we're long past hope of a successful reset */ + if (intel_gt_is_wedged(gt)) + return -EIO; /* we're long past hope of a successful reset */ - wakeref = intel_runtime_pm_get(gt->uncore->rpm); + wakeref = intel_runtime_pm_get(gt->uncore->rpm); - err = intel_gt_live_subtests(tests, gt); + err = intel_gt_live_subtests(tests, gt); - intel_runtime_pm_put(gt->uncore->rpm, wakeref); + intel_runtime_pm_put(gt->uncore->rpm, wakeref); - return err; + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c index 23f04f6f8fba..ac26c91b1e1f 100644 --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c @@ -1986,9 +1986,18 @@ int intel_lrc_live_selftests(struct drm_i915_private *i915) SUBTEST(live_lrc_indirect_ctx_bb), SUBTEST(live_lrc_per_ctx_bb), }; + struct intel_gt *gt; + unsigned int id; + int err; if (!HAS_LOGICAL_RING_CONTEXTS(i915)) return 0; - return intel_gt_live_subtests(tests, to_gt(i915)); + for_each_gt(gt, i915, id) { + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_migrate.c b/drivers/gpu/drm/i915/gt/selftest_migrate.c index 5b986a7687d9..997fd1ec155c 100644 --- a/drivers/gpu/drm/i915/gt/selftest_migrate.c +++ b/drivers/gpu/drm/i915/gt/selftest_migrate.c @@ -562,7 +562,7 @@ static int live_emit_pte_full_ring(void *arg) * nearly full. */ - if (igt_spinner_init(&st.spin, to_gt(i915))) + if (igt_spinner_init(&st.spin, gt)) return -ENOMEM; obj = i915_gem_object_create_internal(i915, 2 * PAGE_SIZE); @@ -806,12 +806,20 @@ int intel_migrate_live_selftests(struct drm_i915_private *i915) SUBTEST(thread_global_copy), SUBTEST(thread_global_clear), }; - struct intel_gt *gt = to_gt(i915); + struct intel_gt *gt; + unsigned int id; + int err; - if (!gt->migrate.context) - return 0; + for_each_gt(gt, i915, id) { + if (!gt->migrate.context) + continue; - return intel_gt_live_subtests(tests, gt); + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } static struct drm_i915_gem_object * @@ -1027,13 +1035,21 @@ int intel_migrate_perf_selftests(struct drm_i915_private *i915) SUBTEST(perf_clear_blt), SUBTEST(perf_copy_blt), }; - struct intel_gt *gt = to_gt(i915); + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(gt)) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; - if (!gt->migrate.context) - return 0; + if (!gt->migrate.context) + continue; - return intel_gt_live_subtests(tests, gt); + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_mocs.c b/drivers/gpu/drm/i915/gt/selftest_mocs.c index d73e438fb85f..916ceba580da 100644 --- a/drivers/gpu/drm/i915/gt/selftest_mocs.c +++ b/drivers/gpu/drm/i915/gt/selftest_mocs.c @@ -445,9 +445,18 @@ int intel_mocs_live_selftests(struct drm_i915_private *i915) SUBTEST(live_mocs_reset), }; struct drm_i915_mocs_table table; + struct intel_gt *gt; + unsigned int id; + int err; if (!get_mocs_settings(i915, &table)) return 0; - return intel_gt_live_subtests(tests, to_gt(i915)); + for_each_gt(gt, i915, id) { + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_reset.c b/drivers/gpu/drm/i915/gt/selftest_reset.c index 2cfc23c58e90..43f90b0687d7 100644 --- a/drivers/gpu/drm/i915/gt/selftest_reset.c +++ b/drivers/gpu/drm/i915/gt/selftest_reset.c @@ -382,13 +382,21 @@ int intel_reset_live_selftests(struct drm_i915_private *i915) SUBTEST(igt_atomic_reset), SUBTEST(igt_atomic_engine_reset), }; - struct intel_gt *gt = to_gt(i915); + struct intel_gt *gt; + unsigned int id; + int err; - if (!intel_has_gpu_reset(gt)) - return 0; + for_each_gt(gt, i915, id) { + if (!intel_has_gpu_reset(gt)) + continue; - if (intel_gt_is_wedged(gt)) - return -EIO; /* we're long past hope of a successful reset */ + if (intel_gt_is_wedged(gt)) + return -EIO; /* we're long past hope of a successful reset */ - return intel_gt_live_subtests(tests, gt); + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_ring_submission.c b/drivers/gpu/drm/i915/gt/selftest_ring_submission.c index 600333ae6c8c..6ce7be6e7692 100644 --- a/drivers/gpu/drm/i915/gt/selftest_ring_submission.c +++ b/drivers/gpu/drm/i915/gt/selftest_ring_submission.c @@ -291,9 +291,18 @@ int intel_ring_submission_live_selftests(struct drm_i915_private *i915) static const struct i915_subtest tests[] = { SUBTEST(live_ctx_switch_wa), }; + struct intel_gt *gt; + unsigned int id; + int err; - if (to_gt(i915)->submission_method > INTEL_SUBMISSION_RING) - return 0; + for_each_gt(gt, i915, id) { + if (gt->submission_method > INTEL_SUBMISSION_RING) + continue; - return intel_gt_live_subtests(tests, to_gt(i915)); + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_timeline.c b/drivers/gpu/drm/i915/gt/selftest_timeline.c index 29d860a5c9c8..0aad7bd50926 100644 --- a/drivers/gpu/drm/i915/gt/selftest_timeline.c +++ b/drivers/gpu/drm/i915/gt/selftest_timeline.c @@ -1421,9 +1421,18 @@ int intel_timeline_live_selftests(struct drm_i915_private *i915) SUBTEST(live_hwsp_rollover_kernel), SUBTEST(live_hwsp_rollover_user), }; + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(to_gt(i915))) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; - return intel_gt_live_subtests(tests, to_gt(i915)); + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c index 4e4c420ae67f..8f9705b25f70 100644 --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c @@ -1374,9 +1374,18 @@ int intel_workarounds_live_selftests(struct drm_i915_private *i915) SUBTEST(live_gpu_reset_workarounds), SUBTEST(live_engine_reset_workarounds), }; + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(to_gt(i915))) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; + + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } - return intel_gt_live_subtests(tests, to_gt(i915)); + return 0; } diff --git a/drivers/gpu/drm/i915/gt/uc/selftest_guc.c b/drivers/gpu/drm/i915/gt/uc/selftest_guc.c index 63a75272924f..c8ce82692614 100644 --- a/drivers/gpu/drm/i915/gt/uc/selftest_guc.c +++ b/drivers/gpu/drm/i915/gt/uc/selftest_guc.c @@ -407,13 +407,21 @@ int intel_guc_live_selftests(struct drm_i915_private *i915) SUBTEST(intel_guc_steal_guc_ids), SUBTEST(intel_guc_fast_request), }; - struct intel_gt *gt = to_gt(i915); + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(gt)) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; - if (!intel_uc_uses_guc_submission(>->uc)) - return 0; + if (!intel_uc_uses_guc_submission(>->uc)) + continue; + + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } - return intel_gt_live_subtests(tests, gt); + return 0; } diff --git a/drivers/gpu/drm/i915/gt/uc/selftest_guc_hangcheck.c b/drivers/gpu/drm/i915/gt/uc/selftest_guc_hangcheck.c index 83801c992488..91a129e73665 100644 --- a/drivers/gpu/drm/i915/gt/uc/selftest_guc_hangcheck.c +++ b/drivers/gpu/drm/i915/gt/uc/selftest_guc_hangcheck.c @@ -150,13 +150,21 @@ int intel_guc_hang_check(struct drm_i915_private *i915) static const struct i915_subtest tests[] = { SUBTEST(intel_hang_guc), }; - struct intel_gt *gt = to_gt(i915); + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(gt)) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; - if (!intel_uc_uses_guc_submission(>->uc)) - return 0; + if (!intel_uc_uses_guc_submission(>->uc)) + continue; + + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } - return intel_gt_live_subtests(tests, gt); + return 0; } diff --git a/drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c b/drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c index 18077801b2e6..e4652b1b303d 100644 --- a/drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c +++ b/drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c @@ -172,13 +172,21 @@ int intel_guc_multi_lrc_live_selftests(struct drm_i915_private *i915) static const struct i915_subtest tests[] = { SUBTEST(intel_guc_multi_lrc_basic), }; - struct intel_gt *gt = to_gt(i915); + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(gt)) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; - if (!intel_uc_uses_guc_submission(>->uc)) - return 0; + if (!intel_uc_uses_guc_submission(>->uc)) + continue; - return intel_gt_live_subtests(tests, gt); + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c index 718cddde7e73..fd58faf31fe5 100644 --- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c +++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c @@ -563,9 +563,18 @@ int i915_gem_evict_live_selftests(struct drm_i915_private *i915) static const struct i915_subtest tests[] = { SUBTEST(igt_evict_contexts), }; + struct intel_gt *gt; + unsigned int id; + int err; - if (intel_gt_is_wedged(to_gt(i915))) - return 0; + for_each_gt(gt, i915, id) { + if (intel_gt_is_wedged(gt)) + continue; + + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } - return intel_gt_live_subtests(tests, to_gt(i915)); + return 0; } diff --git a/drivers/gpu/drm/i915/selftests/intel_uncore.c b/drivers/gpu/drm/i915/selftests/intel_uncore.c index 514d2200751b..e741dd322537 100644 --- a/drivers/gpu/drm/i915/selftests/intel_uncore.c +++ b/drivers/gpu/drm/i915/selftests/intel_uncore.c @@ -288,6 +288,15 @@ int intel_uncore_live_selftests(struct drm_i915_private *i915) SUBTEST(live_fw_table), SUBTEST(live_forcewake_ops), }; + struct intel_gt *gt; + unsigned int id; + int err; - return intel_gt_live_subtests(tests, to_gt(i915)); + for_each_gt(gt, i915, id) { + err = intel_gt_live_subtests(tests, gt); + if (err) + return err; + } + + return 0; } -- 2.55.0
