[igt-dev] [PATCH i-g-t v2] tests/kms_display_modes: Fixed mode selection for extended mode tests

Kamil Konieczny kamil.konieczny at linux.intel.com
Wed Mar 8 17:25:55 UTC 2023


Hi,

On 2023-02-24 at 15:10:07 +0530, Modem, Bhanuprakash wrote:
> 
> 
> On Sun-14-08-2022 02:58 pm, Mohammed Thasleem wrote:
> > Added check on ENOSPC when two moniters connected through MST.
> > This will find the connector mode combo that fits into the
> > bandwidth when more than one monitor is connected.
> > 
> > Example:
> >    When two monitors connected through MST, the second monitor
> >    also tries to use the same mode. So two such modes may not
> >    fit into the link bandwidth. So, iterate through connected
> >    outputs & modes and find a combination of modes those fit
> >    into the link BW.
> > 
> > v2: -Updated commit msg and description. (Bhanu)
> >      -Renamed restart with retry. (Bhanu)
> >      -Moved igt_pipe_crc_new before retry. (Bhanu)
> >      -Removed unrelated changes and new line. (Bhanu)
> >      -Minor changes.
> > 
> > Signed-off-by: Mohammed Thasleem <mohammed.thasleem at intel.com>
> > ---
> >   tests/kms_display_modes.c | 25 +++++++++++++++++++++----
> >   1 file changed, 21 insertions(+), 4 deletions(-)
> > 
> > diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c
> > index e4191811..19026dc1 100644
> > --- a/tests/kms_display_modes.c
> > +++ b/tests/kms_display_modes.c
> > @@ -43,7 +43,7 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
> >   	igt_plane_t *plane[2];
> >   	igt_pipe_crc_t *pipe_crc[2] = { 0 };
> >   	igt_crc_t ref_crc[2], crc[2];
> > -	int count = 0, width, height;
> > +	int count = 0, width, height, ret;
> >   	cairo_t *cr;
> >   	for_each_connected_output(display, output) {
> > @@ -54,14 +54,16 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
> >   			break;
> >   	}
> > +	pipe_crc[0] = igt_pipe_crc_new(data->drm_fd, pipe1, IGT_PIPE_CRC_SOURCE_AUTO);
> > +	pipe_crc[1] = igt_pipe_crc_new(data->drm_fd, pipe2, IGT_PIPE_CRC_SOURCE_AUTO);
> > +
> > +retry:
> >   	igt_output_set_pipe(extended_output[0], pipe1);
> >   	igt_output_set_pipe(extended_output[1], pipe2);
> >   	mode[0] = igt_output_get_mode(extended_output[0]);
> >   	mode[1] = igt_output_get_mode(extended_output[1]);
> > -	pipe_crc[0] = igt_pipe_crc_new(data->drm_fd, pipe1, IGT_PIPE_CRC_SOURCE_AUTO);
> > -	pipe_crc[1] = igt_pipe_crc_new(data->drm_fd, pipe2, IGT_PIPE_CRC_SOURCE_AUTO);
> >   	igt_create_color_fb(data->drm_fd, mode[0]->hdisplay, mode[0]->vdisplay,
> >   			     DRM_FORMAT_XRGB8888, 0, 1, 0, 0, &fbs[0]);
> > @@ -79,7 +81,22 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
> >   	igt_fb_set_size(&fbs[1], plane[1], mode[1]->hdisplay, mode[1]->vdisplay);
> >   	igt_plane_set_size(plane[1], mode[1]->hdisplay, mode[1]->vdisplay);
> > -	igt_display_commit2(display, COMMIT_ATOMIC);
> > +	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
> 
> It would be better to add one or two line comment about this handling. Maybe
> you can add it while pushing this patch, no need to float a new rev.
> 
> Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> 
> - Bhanu
> 

One more thing is how is it preventing infinite loop ?

> > +	if (ret != 0 && errno == ENOSPC) {
> > +		bool found = igt_override_all_active_output_modes_to_fit_bw(display);
> > +
> > +		igt_require_f(found, "No valid mode combo found.\n");
> > +
> > +		for_each_connected_output(display, output)
> > +			igt_output_set_pipe(output, PIPE_NONE);
> > +
> > +		igt_remove_fb(data->drm_fd, &fbs[0]);
> > +		igt_remove_fb(data->drm_fd, &fbs[1]);
> > +
> > +		goto retry;
> > +	}
> > +
> > +	igt_assert(!ret);

This one should be more elaborate, maybe use igt_assert_f(!ret, "description here\n");

Regards,
Kamil

> >   	igt_pipe_crc_collect_crc(pipe_crc[0], &ref_crc[0]);
> >   	igt_pipe_crc_collect_crc(pipe_crc[1], &ref_crc[1]);


More information about the igt-dev mailing list