diff --git a/tests/perf.c b/tests/perf.c index 152d48a7f92b39e267ee42414195f1321a397545..b7d5e50e352d726e3226fb848fa22a09fdb88bcf 100644 --- a/tests/perf.c +++ b/tests/perf.c @@ -4242,6 +4242,27 @@ static void print_sseu_config(struct drm_i915_gem_context_param_sseu *sseu) sseu->max_eus_per_subslice); } +static struct drm_i915_gem_context_param_sseu +make_valid_reduced_sseu_config(struct drm_i915_gem_context_param_sseu default_sseu) +{ + struct drm_i915_gem_context_param_sseu sseu = default_sseu; + + if (intel_gen(devid) == 11) { + /* + * On Gen11 there are restrictions on what subslices + * can be disabled, notably we're not able to enable + * more than half the subslice. So disable half + * subslices only. + */ + for (int i = 0; i < DIV_ROUND_UP(__builtin_popcount(default_sseu.subslice_mask), 2); i++) + sseu.subslice_mask = mask_minus_one(sseu.subslice_mask); + } else { + sseu.subslice_mask = mask_minus_one(sseu.subslice_mask); + } + + return sseu; +} + static void test_global_sseu_config_invalid(void) { @@ -4310,8 +4331,7 @@ test_global_sseu_config_invalid(void) igt_fork(child, 1) { igt_drop_root(); - sseu_param = default_sseu; - sseu_param.subslice_mask = mask_minus_one(sseu_param.subslice_mask); + sseu_param = make_valid_reduced_sseu_config(default_sseu); do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_OPEN, ¶m, EACCES); } igt_waitchildren(); @@ -4357,21 +4377,7 @@ test_global_sseu_config(void) write_u64_file("/proc/sys/dev/i915/perf_stream_paranoid", 0); - sseu_param = default_sseu; - - if (intel_gen(devid) == 11) { - /* - * On Gen11 there are restrictions on what subslices - * can be disabled, notably we're not able to enable - * more than half the subslice. So disable half - * subslices only. - */ - for (int i = 0; i < DIV_ROUND_UP(__builtin_popcount(default_sseu.subslice_mask), 2); i++) - sseu_param.subslice_mask = mask_minus_one(sseu_param.subslice_mask); - } else { - sseu_param.subslice_mask = mask_minus_one(sseu_param.subslice_mask); - } - + sseu_param = make_valid_reduced_sseu_config(default_sseu); igt_debug("Selected context sseu:\n"); print_sseu_config(&sseu_param);