igt_live_test.c 1.8 KB

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