aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/selftests/i915_gem_context.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/selftests/i915_gem_context.c')
-rw-r--r--drivers/gpu/drm/i915/selftests/i915_gem_context.c69
1 files changed, 34 insertions, 35 deletions
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/selftests/i915_gem_context.c
index d00d0bb07784..7eb58a9d1319 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_context.c
@@ -710,47 +710,45 @@ __sseu_prepare(struct drm_i915_private *i915,
710 unsigned int flags, 710 unsigned int flags,
711 struct i915_gem_context *ctx, 711 struct i915_gem_context *ctx,
712 struct intel_engine_cs *engine, 712 struct intel_engine_cs *engine,
713 struct igt_spinner **spin_out) 713 struct igt_spinner **spin)
714{ 714{
715 int ret = 0; 715 struct i915_request *rq;
716 716 int ret;
717 if (flags & (TEST_BUSY | TEST_RESET)) {
718 struct igt_spinner *spin;
719 struct i915_request *rq;
720 717
721 spin = kzalloc(sizeof(*spin), GFP_KERNEL); 718 *spin = NULL;
722 if (!spin) { 719 if (!(flags & (TEST_BUSY | TEST_RESET)))
723 ret = -ENOMEM; 720 return 0;
724 goto out;
725 }
726 721
727 ret = igt_spinner_init(spin, i915); 722 *spin = kzalloc(sizeof(**spin), GFP_KERNEL);
728 if (ret) 723 if (!*spin)
729 return ret; 724 return -ENOMEM;
730 725
731 rq = igt_spinner_create_request(spin, ctx, engine, MI_NOOP); 726 ret = igt_spinner_init(*spin, i915);
732 if (IS_ERR(rq)) { 727 if (ret)
733 ret = PTR_ERR(rq); 728 goto err_free;
734 igt_spinner_fini(spin);
735 kfree(spin);
736 goto out;
737 }
738 729
739 i915_request_add(rq); 730 rq = igt_spinner_create_request(*spin, ctx, engine, MI_NOOP);
731 if (IS_ERR(rq)) {
732 ret = PTR_ERR(rq);
733 goto err_fini;
734 }
740 735
741 if (!igt_wait_for_spinner(spin, rq)) { 736 i915_request_add(rq);
742 pr_err("%s: Spinner failed to start!\n", name);
743 igt_spinner_end(spin);
744 igt_spinner_fini(spin);
745 kfree(spin);
746 ret = -ETIMEDOUT;
747 goto out;
748 }
749 737
750 *spin_out = spin; 738 if (!igt_wait_for_spinner(*spin, rq)) {
739 pr_err("%s: Spinner failed to start!\n", name);
740 ret = -ETIMEDOUT;
741 goto err_end;
751 } 742 }
752 743
753out: 744 return 0;
745
746err_end:
747 igt_spinner_end(*spin);
748err_fini:
749 igt_spinner_fini(*spin);
750err_free:
751 kfree(fetch_and_zero(spin));
754 return ret; 752 return ret;
755} 753}
756 754
@@ -897,22 +895,23 @@ __sseu_test(struct drm_i915_private *i915,
897 895
898 ret = __sseu_prepare(i915, name, flags, ctx, engine, &spin); 896 ret = __sseu_prepare(i915, name, flags, ctx, engine, &spin);
899 if (ret) 897 if (ret)
900 goto out; 898 goto out_context;
901 899
902 ret = __i915_gem_context_reconfigure_sseu(ctx, engine, sseu); 900 ret = __i915_gem_context_reconfigure_sseu(ctx, engine, sseu);
903 if (ret) 901 if (ret)
904 goto out; 902 goto out_spin;
905 903
906 ret = __sseu_finish(i915, name, flags, ctx, kctx, engine, obj, 904 ret = __sseu_finish(i915, name, flags, ctx, kctx, engine, obj,
907 hweight32(sseu.slice_mask), spin); 905 hweight32(sseu.slice_mask), spin);
908 906
909out: 907out_spin:
910 if (spin) { 908 if (spin) {
911 igt_spinner_end(spin); 909 igt_spinner_end(spin);
912 igt_spinner_fini(spin); 910 igt_spinner_fini(spin);
913 kfree(spin); 911 kfree(spin);
914 } 912 }
915 913
914out_context:
916 kernel_context_close(kctx); 915 kernel_context_close(kctx);
917 916
918 return ret; 917 return ret;