[PATCH i-g-t v1 1/5] tests/kms_plane_scaling: Update scaling functions to return error codes

Sharma, Swati2 swati2.sharma at intel.com
Tue Sep 10 07:06:12 UTC 2024


Hi Ramanaidu,


On 05-Sep-24 8:20 PM, Naladala Ramanaidu wrote:
> This will ensures that the system can automatically find a suitable
> configuration, improving the robustness and flexibility of the
> testing process. Introduce a `ret` variable to capture the return
> value of scaling operations. Modify `check_scaling_pipe_plane_rot`
> to return an integer error code instead of void. Update
> `test_scaler_with_modifier_pipe`, `test_scaler_with_rotation_pipe`,
> and `test_scaler_with_pixel_format_pipe` to handle the returned
> error code.
> 
> v1: fix crash issues.  (Swati)
> 
> Signed-off-by: Naladala Ramanaidu <ramanaidu.naladala at intel.com>
> ---
>   tests/kms_plane_scaling.c | 263 +++++++++++++++++++++-----------------
>   1 file changed, 148 insertions(+), 115 deletions(-)
> 
> diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
> index 42eb67409..5c5837a51 100644
> --- a/tests/kms_plane_scaling.c
> +++ b/tests/kms_plane_scaling.c
> @@ -566,15 +566,16 @@ static void cleanup_crtc(data_t *data)
>   	cleanup_fbs(data);
>   }
>   
> -static void check_scaling_pipe_plane_rot(data_t *d, igt_plane_t *plane,
> -					 uint32_t pixel_format,
> -					 uint64_t modifier,
> -					 double sf_plane,
> -					 bool is_clip_clamp,
> -					 bool is_upscale,
> -					 enum pipe pipe,
> -					 igt_output_t *output,
> -					 igt_rotation_t rot)
> +static uint32_t
> +check_scaling_pipe_plane_rot(data_t *d, igt_plane_t *plane,
> +			     uint32_t pixel_format,
> +			     uint64_t modifier,
> +			     double sf_plane,
> +			     bool is_clip_clamp,
> +			     bool is_upscale,
> +			     enum pipe pipe,
> +			     igt_output_t *output,
> +			     igt_rotation_t rot)
>   {
>   	igt_display_t *display = &d->display;
>   	drmModeModeInfo *mode;
> @@ -634,11 +635,7 @@ static void check_scaling_pipe_plane_rot(data_t *d, igt_plane_t *plane,
>   		if (commit_ret == 0)
>   			break;
>   	}
> -
> -	igt_skip_on_f(commit_ret == -ERANGE || commit_ret == -EINVAL,
> -		      "Unsupported scaling operation in driver with return value %s\n",
> -		      (commit_ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
> -	igt_assert_eq(commit_ret, 0);
> +	return commit_ret;
>   }
>   
>   static const igt_rotation_t rotations[] = {
> @@ -710,16 +707,18 @@ static const uint64_t modifiers[] = {
>   	I915_FORMAT_MOD_4_TILED
>   };
>   
> -static void test_scaler_with_modifier_pipe(data_t *d,
> -					   double sf_plane,
> -					   bool is_clip_clamp,
> -					   bool is_upscale,
> -					   enum pipe pipe,
> -					   igt_output_t *output)
> +static uint32_t
> +test_scaler_with_modifier_pipe(data_t *d,
> +			       double sf_plane,
> +			       bool is_clip_clamp,
> +			       bool is_upscale,
> +			       enum pipe pipe,
> +			       igt_output_t *output)
>   {
>   	igt_display_t *display = &d->display;
>   	unsigned format = DRM_FORMAT_XRGB8888;
>   	igt_plane_t *plane;
> +	uint32_t ret;
>   
>   	cleanup_crtc(d);
>   
> @@ -733,28 +732,33 @@ static void test_scaler_with_modifier_pipe(data_t *d,
>   			uint64_t modifier = modifiers[i];
>   
>   			if (igt_plane_has_format_mod(plane, format, modifier))
> -				check_scaling_pipe_plane_rot(d, plane,
> -							     format, modifier,
> -							     sf_plane,
> -							     is_clip_clamp,
> -							     is_upscale,
> -							     pipe, output,
> -							     IGT_ROTATION_0);
> +				ret = check_scaling_pipe_plane_rot(d, plane,
> +								   format, modifier,
> +								   sf_plane,
> +								   is_clip_clamp,
> +								   is_upscale,
> +								   pipe, output,
> +								   IGT_ROTATION_0);
> +			if (ret != 0)
> +				return ret;
>   		}
>   	}
> +	return ret;
>   }
>   
> -static void test_scaler_with_rotation_pipe(data_t *d,
> -					   double sf_plane,
> -					   bool is_clip_clamp,
> -					   bool is_upscale,
> -					   enum pipe pipe,
> -					   igt_output_t *output)
> +static uint32_t
> +test_scaler_with_rotation_pipe(data_t *d,
> +			       double sf_plane,
> +			       bool is_clip_clamp,
> +			       bool is_upscale,
> +			       enum pipe pipe,
> +			       igt_output_t *output)
>   {
>   	igt_display_t *display = &d->display;
>   	unsigned format = DRM_FORMAT_XRGB8888;
>   	uint64_t modifier = DRM_FORMAT_MOD_LINEAR;
>   	igt_plane_t *plane;
> +	uint32_t ret;
>   
>   	cleanup_crtc(d);
>   
> @@ -768,26 +772,31 @@ static void test_scaler_with_rotation_pipe(data_t *d,
>   			igt_rotation_t rot = rotations[i];
>   
>   			if (igt_plane_has_rotation(plane, rot))
> -				check_scaling_pipe_plane_rot(d, plane,
> -							     format, modifier,
> -							     sf_plane,
> -							     is_clip_clamp,
> -							     is_upscale,
> -							     pipe, output,
> -							     rot);
> +				ret = check_scaling_pipe_plane_rot(d, plane,
> +								   format, modifier,
> +								   sf_plane,
> +								   is_clip_clamp,
> +								   is_upscale,
> +								   pipe, output,
> +								   rot);
> +			if (ret != 0)
> +				return ret;
>   		}
>   	}
> +	return ret;
>   }
>   
> -static void test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
> -					       bool is_clip_clamp,
> -					       bool is_upscale,
> -					       enum pipe pipe,
> -					       igt_output_t *output)
> +static uint32_t
> +test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
> +				   bool is_clip_clamp,
> +				   bool is_upscale,
> +				   enum pipe pipe,
> +				   igt_output_t *output)
>   {
>   	igt_display_t *display = &d->display;
>   	uint64_t modifier = DRM_FORMAT_MOD_LINEAR;
>   	igt_plane_t *plane;
> +	uint32_t ret;
>   
>   	cleanup_crtc(d);
>   
> @@ -810,17 +819,21 @@ static void test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
>   			if (test_format(d, &tested_formats, format) &&
>   			    igt_plane_has_format_mod(plane, format, modifier) &&
>   			    can_scale(d, format))
> -			    check_scaling_pipe_plane_rot(d, plane,
> -							 format, modifier,
> -							 sf_plane,
> -							 is_clip_clamp,
> -							 is_upscale,
> -							 pipe, output,
> -							 IGT_ROTATION_0);
> +				ret = check_scaling_pipe_plane_rot(d, plane,
> +								   format, modifier,
> +								   sf_plane,
> +								   is_clip_clamp,
> +								   is_upscale,
> +								   pipe, output,
> +								   IGT_ROTATION_0);
> +			if (ret != 0) {
> +				igt_vec_fini(&tested_formats);
> +				return ret;
> +			}
>   		}
> -
>   		igt_vec_fini(&tested_formats);
>   	}
> +	return ret;
>   }
>   
>   static enum pipe
> @@ -1327,6 +1340,7 @@ static data_t data;
>   igt_main_args("", long_opts, help_str, opt_handler, &data)
>   {
>   	enum pipe pipe;
> +	uint32_t ret = -EINVAL;
>   
>   	igt_fixture {
>   		data.drm_fd = drm_open_driver_master(DRIVER_ANY);
> @@ -1343,21 +1357,23 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
>   			igt_describe(scaler_with_pixel_format_tests[index].describe);
>   			igt_subtest_with_dynamic(scaler_with_pixel_format_tests[index].name) {
>   				for_each_pipe(&data.display, pipe) {
> -					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> -						if (!pipe_output_combo_valid(&data.display, pipe, output))
> -							continue;
> -						if (get_num_scalers(&data.display, pipe) < 1)
> -							continue;
> -
> -						igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -
> -							test_scaler_with_pixel_format_pipe(&data,
> +					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> +						for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +							if (!pipe_output_combo_valid(&data.display, pipe, output))
> +								continue;
> +							if (get_num_scalers(&data.display, pipe) < 1)
> +								continue;

Add a new line here.

With this fixed.
Reviewed-by: Swati Sharma <swati2.sharma at intel.com>

> +							ret = test_scaler_with_pixel_format_pipe(&data,
>   									scaler_with_pixel_format_tests[index].sf,
>   									false,
>   									scaler_with_pixel_format_tests[index].is_upscale,
>   									pipe, output);
> +							if (ret == 0)
> +								break;
>   						}
> -						break;
> +						igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
> +							      "Unsupported scaling operation in driver with return value %s\n",
> +							      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
>   					}
>   				}
>   			}
> @@ -1367,21 +1383,24 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
>   			igt_describe(scaler_with_rotation_tests[index].describe);
>   			igt_subtest_with_dynamic(scaler_with_rotation_tests[index].name) {
>   				for_each_pipe(&data.display, pipe) {
> -					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> -						if (!pipe_output_combo_valid(&data.display, pipe, output))
> -							continue;
> -						if (get_num_scalers(&data.display, pipe) < 1)
> -							continue;
> -
> -						igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -
> -							test_scaler_with_rotation_pipe(&data,
> +					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> +						for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +							if (!pipe_output_combo_valid(&data.display, pipe, output))
> +								continue;
> +							if (get_num_scalers(&data.display, pipe) < 1)
> +								continue;
> +
> +							ret = test_scaler_with_rotation_pipe(&data,
>   									scaler_with_rotation_tests[index].sf,
>   									false,
>   									scaler_with_rotation_tests[index].is_upscale,
>   									pipe, output);
> +							if (ret == 0)
> +								break;
>   						}
> -						break;
> +						igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
> +							      "Unsupported scaling operation in driver with return value %s\n",
> +							      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
>   					}
>   				}
>   			}
> @@ -1391,21 +1410,24 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
>   			igt_describe(scaler_with_modifiers_tests[index].describe);
>   			igt_subtest_with_dynamic(scaler_with_modifiers_tests[index].name) {
>   				for_each_pipe(&data.display, pipe) {
> -					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> -						if (!pipe_output_combo_valid(&data.display, pipe, output))
> -							continue;
> -						if (get_num_scalers(&data.display, pipe) < 1)
> -							continue;
> -
> -						igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -
> -							test_scaler_with_modifier_pipe(&data,
> +					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> +						for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +							if (!pipe_output_combo_valid(&data.display, pipe, output))
> +								continue;
> +							if (get_num_scalers(&data.display, pipe) < 1)
> +								continue;
> +
> +							ret = test_scaler_with_modifier_pipe(&data,
>   									scaler_with_modifiers_tests[index].sf,
>   									false,
>   									scaler_with_modifiers_tests[index].is_upscale,
>   									pipe, output);
> +							if (ret == 0)
> +								break;
>   						}
> -						break;
> +						igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
> +							      "Unsupported scaling operation in driver with return value %s\n",
> +							      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
>   					}
>   				}
>   			}
> @@ -1414,39 +1436,46 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
>   		igt_describe("Tests scaling with clipping and clamping, pixel formats.");
>   		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-pixel-formats") {
>   			for_each_pipe(&data.display, pipe) {
> -				for_each_valid_output_on_pipe(&data.display, pipe, output) {
> -					if (!pipe_output_combo_valid(&data.display, pipe, output))
> -						continue;
> -					if (get_num_scalers(&data.display, pipe) < 1)
> -						continue;
> -
> -					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> +				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> +					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +						if (!pipe_output_combo_valid(&data.display, pipe, output))
> +							continue;
> +						if (get_num_scalers(&data.display, pipe) < 1)
> +							continue;
>   
> -						test_scaler_with_pixel_format_pipe(&data, 0.0, true,
> -										   false, pipe,
> -										   output);
> +						ret = test_scaler_with_pixel_format_pipe(&data, 0.0, true,
> +											 false, pipe,
> +											 output);
> +						if (ret == 0)
> +							break;
>   					}
> -					break;
> +					igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
> +						      "Unsupported scaling operation in driver with return value %s\n",
> +						      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
>   				}
>   			}
>   		}
>   
> +
>   		igt_describe("Tests scaling with clipping and clamping, rotation.");
>   		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-rotation") {
>   			for_each_pipe(&data.display, pipe) {
> -				for_each_valid_output_on_pipe(&data.display, pipe, output) {
> -					if (!pipe_output_combo_valid(&data.display, pipe, output))
> -						continue;
> -					if (get_num_scalers(&data.display, pipe) < 1)
> -						continue;
> -
> -					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> +				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> +					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +						if (!pipe_output_combo_valid(&data.display, pipe, output))
> +							continue;
> +						if (get_num_scalers(&data.display, pipe) < 1)
> +							continue;
>   
> -						test_scaler_with_rotation_pipe(&data, 0.0, true,
> -										false, pipe,
> -										output);
> +						ret = test_scaler_with_rotation_pipe(&data, 0.0, true,
> +										     false, pipe,
> +										     output);
> +						if (ret == 0)
> +							break;
>   					}
> -					break;
> +					igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
> +						      "Unsupported scaling operation in driver with return value %s\n",
> +						      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
>   				}
>   			}
>   		}
> @@ -1454,18 +1483,22 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
>   		igt_describe("Tests scaling with clipping and clamping, modifiers.");
>   		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-modifiers") {
>   			for_each_pipe(&data.display, pipe) {
> -				for_each_valid_output_on_pipe(&data.display, pipe, output) {
> -					if (!pipe_output_combo_valid(&data.display, pipe, output))
> -						continue;
> -					if (get_num_scalers(&data.display, pipe) < 1)
> -						continue;
> +				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> +					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +						if (!pipe_output_combo_valid(&data.display, pipe, output))
> +							continue;
> +						if (get_num_scalers(&data.display, pipe) < 1)
> +							continue;
>   
> -					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -						test_scaler_with_modifier_pipe(&data, 0.0, true,
> -										false, pipe,
> -										output);
> +						ret = test_scaler_with_modifier_pipe(&data, 0.0, true,
> +										     false, pipe,
> +										     output);
> +						if (ret == 0)
> +							break;
>   					}
> -					break;
> +					igt_skip_on_f(ret == -ERANGE || ret == -EINVAL,
> +						      "Unsupported scaling operation in driver with return value %s\n",
> +						      (ret == -EINVAL) ? "-EINVAL" : "-ERANGE");
>   				}
>   			}
>   		}


More information about the igt-dev mailing list