1 | /* |
2 | * SPDX-License-Identifier: MIT |
3 | * |
4 | * Copyright © 2018 Intel Corporation |
5 | */ |
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 | |
15 | int 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(error: &i915->gpu_error, |
42 | engine); |
43 | } |
44 | |
45 | t->reset_global = i915_reset_count(error: &i915->gpu_error); |
46 | |
47 | return 0; |
48 | } |
49 | |
50 | int 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(error: &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(error: &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 | |