[igt-dev] [PATCH i-g-t] tests/kms_big_fb: Add retry mechanism for async flip subtests
Ville Syrjälä
ville.syrjala at linux.intel.com
Tue Oct 5 11:06:27 UTC 2021
On Tue, Oct 05, 2021 at 01:46:54PM +0300, Juha-Pekka Heikkila wrote:
>
> On 5.10.2021 13.22, Ville Syrjälä wrote:
> > On Tue, Oct 05, 2021 at 03:30:01PM +0530, Karthik B S wrote:
> >> On 10/4/2021 9:13 PM, Ville Syrjälä wrote:
> >>> On Mon, Oct 04, 2021 at 12:19:01PM +0300, Ville Syrjälä wrote:
> >>>> On Mon, Oct 04, 2021 at 02:26:29PM +0530, Karthik B S wrote:
> >>>>> Async flip subtests fail sporadically with CRC failure on CI.
> >>>>> This is expected as these tests are not run on highest priority by the
> >>>>> scheduler, but this creates noise on CI. Add retry mechanism to rerun
> >>>>> the test once if failure is seen.
> >>>>>
> >>>>> Signed-off-by: Karthik B S <karthik.b.s at intel.com>
> >>>>> ---
> >>>>> tests/i915/kms_big_fb.c | 9 +++++++++
> >>>>> 1 file changed, 9 insertions(+)
> >>>>>
> >>>>> diff --git a/tests/i915/kms_big_fb.c b/tests/i915/kms_big_fb.c
> >>>>> index 308227c9..8c09f59e 100644
> >>>>> --- a/tests/i915/kms_big_fb.c
> >>>>> +++ b/tests/i915/kms_big_fb.c
> >>>>> @@ -481,6 +481,7 @@ max_hw_stride_async_flip_test(data_t *data)
> >>>>> h = data->output->config.default_mode.vdisplay;
> >>>>> igt_plane_t *primary;
> >>>>> igt_crc_t compare_crc, async_crc;
> >>>>> + bool retried = false;
> >>>>>
> >>>>> igt_require(data->display.is_atomic);
> >>>>> igt_output_set_pipe(data->output, data->pipe);
> >>>>> @@ -513,6 +514,7 @@ max_hw_stride_async_flip_test(data_t *data)
> >>>>> INTEL_PIPE_CRC_SOURCE_AUTO);
> >>>>> igt_pipe_crc_start(data->pipe_crc);
> >>>>>
> >>>>> +retry:
> >>>>> igt_set_timeout(5, "Async pageflipping loop got stuck!\n");
> >>>>> for (int i = 0; i < 2; i++) {
> >>>>> igt_plane_set_fb(primary, &data->big_fb);
> >>>>> @@ -548,6 +550,13 @@ max_hw_stride_async_flip_test(data_t *data)
> >>>>> igt_assert_f(kmstest_get_vblank(data->drm_fd, data->pipe, 0) -
> >>>>> startframe == 1, "lost frames\n");
> >>>>>
> >>>>> + /* Test is not running at real time priority, so allow one failure*/
> >>>>> + if (!(igt_check_crc_equal(&compare_crc, &async_crc)^(i^1)) && !retried) {
> >>>>> + retried = true;
> >>>>> + igt_reset_timeout();
> >>>>> + goto retry;
> >>>>> + }
> >>>>> +
> >>>> This test seems to entirely fit kms_big_fb in general. I don't
> >>> ^
> >>> not
> >>>
> >>> is what I meant to write. Somewhat important small word.
> >>>
> >>>> think kms_big_fb should be testing any timing sensitive stuff.
> >>>>
> >>>> So I think we should change this to a form that follows the rest
> >>>> of kms_big_fb to validate that each page flip just presents the
> >>>> correct data on screen. The timing sensitive stuff is best left
> >>>> for kms_async_flip.
> >>>>
> >>>> So this should maybe be something like: flip to a correctly sized
> >>>> temp fb with the wrong contents and change the plane src coordinates,
> >>>> and then async flip back to the correct fb and validate the
> >>>> correct data is now on screen.
> >> Thank you for the feedback.
> >>
> >> Is this because we can handle any timing related failures in the same
> >> test (may be using some common mechanism)? So add a subtest for
> >> max-hw-stride in kms_async_flips and rewrite this subtest as mentioned
> >> above?
> > I don't think there's anything specifically about max stride
> > that needs timing sensitive tests. In theory kms_async_flip/crc
> > already tests what we need, which is that there are no visual
> > artifacts when flipping between two identical framebuffers.
> > The only exception would be if there's some very specific
> > hardware issue with big stride + async flip.
>
> At a time there was explicit wishes from hw guys how this test was to be
> performed with strides past 64K size. I have no idea if their worries
> are still valid.
>
> Timing sensitivity comes just from the fact when async flip is made the
> full stride flips as expected and it need to be captured with crc from
> that flipping frame.
kms_async_flip/crc just keeps flipping all the time, and checks
every frame that the crc remains the same.
Though atm it uses a solid color fb, so maybe not the best thing
necessarily for detecting weird stuff. Should change it to use the
normal pattern fb perhaps (+ the stripe on one edge we clobber/unclobber).
Though a lot of the normal pattern fb is just black. Maybe we should
have a some kind of standard pattern fb with a bit more of the area
filled with interesting shapes that are easily corrupted by eg. any
single tile fetch going into the weeds...
I guess we could add a big-stride variant there too. For that we'd
probably want to put the "what is the max supported hw stride?"
stuff somewhere into lib/ (and extend it for all the platforms).
--
Ville Syrjälä
Intel
More information about the igt-dev
mailing list