[igt-dev] [i-g-t] tests/kms_plane: skip memory demanding modes in test_plane_panning

Andrzej Hajda andrzej.hajda at intel.com
Tue Nov 22 07:22:37 UTC 2022


Gently ping.

Regards
Andrzej

On 15.11.2022 08:28, Andrzej Hajda wrote:
> test_plane_panning requires about 10 times bigger amount of memory than
> memory required by framebuffer in default display mode. In case of some
> configurations it can exceed available memory (4k modes on small-bar
> systems), causing test aborts.
>
> Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/6824
> Signed-off-by: Andrzej Hajda <andrzej.hajda at intel.com>
> ---
>   tests/kms_plane.c | 28 +++++++++++++++++++++++++---
>   1 file changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/tests/kms_plane.c b/tests/kms_plane.c
> index 8a54ba6645c..fc530d2cfd3 100644
> --- a/tests/kms_plane.c
> +++ b/tests/kms_plane.c
> @@ -342,14 +342,14 @@ test_plane_panning_with_output(data_t *data,
>   	drmModeModeInfo *mode;
>   	igt_crc_t crc;
>   
> -	igt_info("Testing connector %s using pipe %s\n",
> -		 igt_output_name(output), kmstest_pipe_name(pipe));
> -
>   	igt_output_set_pipe(output, pipe);
>   
>   	mode = igt_output_get_mode(output);
>   	primary = igt_output_get_plane(output, 0);
>   
> +	igt_info("Testing connector %s using pipe %s, mode %s\n",
> +		 igt_output_name(output), kmstest_pipe_name(pipe), mode->name);
> +
>   	create_fb_for_mode_panning(data, mode, &primary_fb);
>   	igt_plane_set_fb(primary, &primary_fb);
>   
> @@ -381,6 +381,8 @@ test_plane_panning_with_output(data_t *data,
>   static void
>   test_plane_panning(data_t *data, enum pipe pipe)
>   {
> +	bool mode_found = false;
> +	uint64_t mem_size = 0;
>   	igt_output_t *output;
>   	igt_crc_t ref_crc;
>   
> @@ -389,6 +391,26 @@ test_plane_panning(data_t *data, enum pipe pipe)
>   
>   	test_init(data, pipe);
>   
> +	for_each_memory_region(r, data->drm_fd)
> +		if (r->ci.memory_class == I915_MEMORY_CLASS_DEVICE)
> +			mem_size = r->cpu_size;
> +
> +	for_each_connector_mode(output) {
> +		drmModeModeInfo *m = &output->config.connector->modes[j__];
> +		uint32_t fb_size = m->hdisplay * m->vdisplay * 4;
> +
> +		/* test allocates 2 double-dim fbs, add one more, to be safe */
> +		if (mem_size && 3 * 4 * fb_size > mem_size) {
> +			igt_debug("Skipping mode %s due to low memory\n", m->name);
> +			continue;
> +		}
> +
> +		igt_output_override_mode(output, m);
> +		mode_found = true;
> +		break;
> +	}
> +	igt_require(mode_found);
> +
>   	if (data->flags & TEST_PANNING_TOP_LEFT)
>   		test_grab_crc(data, output, pipe, &red, data->flags, &ref_crc);
>   	else



More information about the igt-dev mailing list