Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * SPDX-License-Identifier: MIT
0003  *
0004  * Copyright © 2018 Intel Corporation
0005  */
0006 
0007 #include "i915_drv.h"
0008 #include "gt/intel_gt.h"
0009 
0010 #include "../i915_selftest.h"
0011 #include "igt_flush_test.h"
0012 #include "igt_live_test.h"
0013 
0014 int igt_live_test_begin(struct igt_live_test *t,
0015             struct drm_i915_private *i915,
0016             const char *func,
0017             const char *name)
0018 {
0019     struct intel_gt *gt = to_gt(i915);
0020     struct intel_engine_cs *engine;
0021     enum intel_engine_id id;
0022     int err;
0023 
0024     t->i915 = i915;
0025     t->func = func;
0026     t->name = name;
0027 
0028     err = intel_gt_wait_for_idle(gt, MAX_SCHEDULE_TIMEOUT);
0029     if (err) {
0030         pr_err("%s(%s): failed to idle before, with err=%d!",
0031                func, name, err);
0032         return err;
0033     }
0034 
0035     t->reset_global = i915_reset_count(&i915->gpu_error);
0036 
0037     for_each_engine(engine, gt, id)
0038         t->reset_engine[id] =
0039             i915_reset_engine_count(&i915->gpu_error, engine);
0040 
0041     return 0;
0042 }
0043 
0044 int igt_live_test_end(struct igt_live_test *t)
0045 {
0046     struct drm_i915_private *i915 = t->i915;
0047     struct intel_engine_cs *engine;
0048     enum intel_engine_id id;
0049 
0050     if (igt_flush_test(i915))
0051         return -EIO;
0052 
0053     if (t->reset_global != i915_reset_count(&i915->gpu_error)) {
0054         pr_err("%s(%s): GPU was reset %d times!\n",
0055                t->func, t->name,
0056                i915_reset_count(&i915->gpu_error) - t->reset_global);
0057         return -EIO;
0058     }
0059 
0060     for_each_engine(engine, to_gt(i915), id) {
0061         if (t->reset_engine[id] ==
0062             i915_reset_engine_count(&i915->gpu_error, engine))
0063             continue;
0064 
0065         pr_err("%s(%s): engine '%s' was reset %d times!\n",
0066                t->func, t->name, engine->name,
0067                i915_reset_engine_count(&i915->gpu_error, engine) -
0068                t->reset_engine[id]);
0069         return -EIO;
0070     }
0071 
0072     return 0;
0073 }