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