74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * SPDX-License-Identifier: MIT
 | |
|  *
 | |
|  * Copyright © 2018 Intel Corporation
 | |
|  */
 | |
| 
 | |
| #include "i915_drv.h"
 | |
| #include "gt/intel_gt.h"
 | |
| 
 | |
| #include "../i915_selftest.h"
 | |
| #include "igt_flush_test.h"
 | |
| #include "igt_live_test.h"
 | |
| 
 | |
| int igt_live_test_begin(struct igt_live_test *t,
 | |
| 			struct drm_i915_private *i915,
 | |
| 			const char *func,
 | |
| 			const char *name)
 | |
| {
 | |
| 	struct intel_gt *gt = to_gt(i915);
 | |
| 	struct intel_engine_cs *engine;
 | |
| 	enum intel_engine_id id;
 | |
| 	int err;
 | |
| 
 | |
| 	t->i915 = i915;
 | |
| 	t->func = func;
 | |
| 	t->name = name;
 | |
| 
 | |
| 	err = intel_gt_wait_for_idle(gt, MAX_SCHEDULE_TIMEOUT);
 | |
| 	if (err) {
 | |
| 		pr_err("%s(%s): failed to idle before, with err=%d!",
 | |
| 		       func, name, err);
 | |
| 		return err;
 | |
| 	}
 | |
| 
 | |
| 	t->reset_global = i915_reset_count(&i915->gpu_error);
 | |
| 
 | |
| 	for_each_engine(engine, gt, id)
 | |
| 		t->reset_engine[id] =
 | |
| 			i915_reset_engine_count(&i915->gpu_error, engine);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int igt_live_test_end(struct igt_live_test *t)
 | |
| {
 | |
| 	struct drm_i915_private *i915 = t->i915;
 | |
| 	struct intel_engine_cs *engine;
 | |
| 	enum intel_engine_id id;
 | |
| 
 | |
| 	if (igt_flush_test(i915))
 | |
| 		return -EIO;
 | |
| 
 | |
| 	if (t->reset_global != i915_reset_count(&i915->gpu_error)) {
 | |
| 		pr_err("%s(%s): GPU was reset %d times!\n",
 | |
| 		       t->func, t->name,
 | |
| 		       i915_reset_count(&i915->gpu_error) - t->reset_global);
 | |
| 		return -EIO;
 | |
| 	}
 | |
| 
 | |
| 	for_each_engine(engine, to_gt(i915), id) {
 | |
| 		if (t->reset_engine[id] ==
 | |
| 		    i915_reset_engine_count(&i915->gpu_error, engine))
 | |
| 			continue;
 | |
| 
 | |
| 		pr_err("%s(%s): engine '%s' was reset %d times!\n",
 | |
| 		       t->func, t->name, engine->name,
 | |
| 		       i915_reset_engine_count(&i915->gpu_error, engine) -
 | |
| 		       t->reset_engine[id]);
 | |
| 		return -EIO;
 | |
| 	}
 | |
| 
 | |
| 	return 0;
 | |
| }
 |