[igt-dev] [v5 i-g-t 07/14] tests/kms_atomic_transition: Fix mode selection for 2x tests

Modem, Bhanuprakash bhanuprakash.modem at intel.com
Tue May 11 11:58:19 UTC 2021


> From: Nautiyal, Ankit K <ankit.k.nautiyal at intel.com>
> Sent: Tuesday, May 11, 2021 3:00 PM
> To: Modem, Bhanuprakash <bhanuprakash.modem at intel.com>; igt-
> dev at lists.freedesktop.org
> Cc: Deak, Imre <imre.deak at intel.com>; Daniel Vetter <daniel.vetter at ffwll.ch>
> Subject: Re: [v5 i-g-t 07/14] tests/kms_atomic_transition: Fix mode selection
> for 2x tests
> 
> 
> On 5/8/2021 9:52 PM, Bhanuprakash Modem wrote:
> > 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.
> >
> > This patch will find a combination of modes that fit into the BW.
> >
> > Cc: Imre Deak <imre.deak at intel.com>
> > Cc: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
> > Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> > Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> > ---
> >   tests/kms_atomic_transition.c | 15 +++++++++++++++
> >   1 file changed, 15 insertions(+)
> >
> > diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
> > index be60940d7..e6931de5f 100644
> > --- a/tests/kms_atomic_transition.c
> > +++ b/tests/kms_atomic_transition.c
> > @@ -100,6 +100,7 @@ run_primary_test(data_t *data, enum pipe pipe,
> igt_output_t *output)
> >   	igt_plane_set_fb(primary, NULL);
> >   	igt_output_set_pipe(output, PIPE_NONE);
> >   	igt_remove_fb(data->drm_fd, &fb);
> > +	igt_display_commit2(&data->display, COMMIT_ATOMIC);
> 
> 
> Is this commit required? I guess it was working earlier.
Still we need this commit to unset the pipe to connector, We need to clean-up
the test before exit.

> 
> >   }
> >
> >   static void *fence_inc_thread(void *arg)
> > @@ -793,6 +794,7 @@ static void run_modeset_tests(data_t *data, int howmany,
> bool nonblocking, bool
> >   	for (i = 0; i < data->display.n_outputs; i++)
> >   		igt_output_set_pipe(&data->display.outputs[i], PIPE_NONE);
> >
> > +retry:
> >   	for_each_connected_output(&data->display, output) {
> >   		drmModeModeInfo *mode = igt_output_get_mode(output);
> >
> > @@ -839,6 +841,19 @@ static void run_modeset_tests(data_t *data, int
> howmany, bool nonblocking, bool
> >
> >   	iter_max = 1 << j;
> 
> I think this line must be after the try commit block.
> 
> In case of retry we will count double the pipes, as j is initialized
> only in the beginning.
True, even though we update the iter_max after the try_commit block, in case
of retry, still the j value can be double the pipe count.

Reinitializing the j to 0 at retry seems to be the best option to me.
> 
> 
> >
> > +	if (igt_display_try_commit_atomic(&data->display,
> > +				DRM_MODE_ATOMIC_TEST_ONLY |
> > +				DRM_MODE_ATOMIC_ALLOW_MODESET,
> > +				NULL) != 0) {
> > +		igt_output_t *out;
> > +		bool found = igt_override_all_active_output_modes_to_fit_bw(&data-
> >display);
> > +		igt_require_f(found, "No valid mode combo found.\n");
> > +
> > +		for_each_connected_output(&data->display, out)
> > +			igt_output_set_pipe(out, PIPE_NONE);
> > +
> > +		goto retry;
> > +	}
> >   	igt_display_commit2(&data->display, COMMIT_ATOMIC);
> 
> As discussed earlier, commit to be in the else block.
> 
> 
> Regards,
> 
> Ankit
> 
> >
> >   	for (i = 0; i < iter_max; i++) {


More information about the igt-dev mailing list