84 lines · c
1/*2 * SPDX-License-Identifier: MIT3 *4 * Copyright © 2018 Intel Corporation5 */6 7#include "i915_drv.h"8#include "gt/intel_gt.h"9#include "gt/intel_gt_print.h"10 11#include "../i915_selftest.h"12#include "igt_flush_test.h"13#include "igt_live_test.h"14 15int igt_live_test_begin(struct igt_live_test *t,16 struct drm_i915_private *i915,17 const char *func,18 const char *name)19{20 struct intel_engine_cs *engine;21 enum intel_engine_id id;22 struct intel_gt *gt;23 unsigned int i;24 int err;25 26 t->i915 = i915;27 t->func = func;28 t->name = name;29 30 for_each_gt(gt, i915, i) {31 32 err = intel_gt_wait_for_idle(gt, MAX_SCHEDULE_TIMEOUT);33 if (err) {34 gt_err(gt, "%s(%s): GT failed to idle before, with err=%d!",35 func, name, err);36 return err;37 }38 39 for_each_engine(engine, gt, id)40 t->reset_engine[i][id] =41 i915_reset_engine_count(&i915->gpu_error,42 engine);43 }44 45 t->reset_global = i915_reset_count(&i915->gpu_error);46 47 return 0;48}49 50int igt_live_test_end(struct igt_live_test *t)51{52 struct drm_i915_private *i915 = t->i915;53 struct intel_engine_cs *engine;54 enum intel_engine_id id;55 struct intel_gt *gt;56 unsigned int i;57 58 if (igt_flush_test(i915))59 return -EIO;60 61 if (t->reset_global != i915_reset_count(&i915->gpu_error)) {62 pr_err("%s(%s): GPU was reset %d times!\n",63 t->func, t->name,64 i915_reset_count(&i915->gpu_error) - t->reset_global);65 return -EIO;66 }67 68 for_each_gt(gt, i915, i) {69 for_each_engine(engine, gt, id) {70 if (t->reset_engine[i][id] ==71 i915_reset_engine_count(&i915->gpu_error, engine))72 continue;73 74 gt_err(gt, "%s(%s): engine '%s' was reset %d times!\n",75 t->func, t->name, engine->name,76 i915_reset_engine_count(&i915->gpu_error, engine) -77 t->reset_engine[i][id]);78 return -EIO;79 }80 }81 82 return 0;83}84