diff options
Diffstat (limited to 'drivers/gpu/drm/i915/selftests/i915_gem_context.c')
| -rw-r--r-- | drivers/gpu/drm/i915/selftests/i915_gem_context.c | 69 |
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 | ||
| 753 | out: | 744 | return 0; |
| 745 | |||
| 746 | err_end: | ||
| 747 | igt_spinner_end(*spin); | ||
| 748 | err_fini: | ||
| 749 | igt_spinner_fini(*spin); | ||
| 750 | err_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 | ||
| 909 | out: | 907 | out_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 | ||
| 914 | out_context: | ||
| 916 | kernel_context_close(kctx); | 915 | kernel_context_close(kctx); |
| 917 | 916 | ||
| 918 | return ret; | 917 | return ret; |
