root/drivers/gpu/drm/i915/selftests/igt_live_test.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. igt_live_test_begin
  2. igt_live_test_end

   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 
  13 int 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 
  47 int 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 }

/* [<][>][^][v][top][bottom][index][help] */