Linux Audio

Check our new training course

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