[Intel-gfx] [PATCH i-g-t 3/5] kms_frontbuffer_tracking: Skip on unreliable CRC.
Vivi, Rodrigo
rodrigo.vivi at intel.com
Thu Dec 3 11:44:03 PST 2015
On Thu, 2015-12-03 at 15:05 -0200, Paulo Zanoni wrote:
> 2015-12-03 14:39 GMT-02:00 Rodrigo Vivi <rodrigo.vivi at intel.com>:
> > Even with all sink crc re-works we still have platforms
> > where after 6 vblanks it is unable to calculate the
> > sink crc. But if we don't get the sink crc it isn't true
> > that test failed, but that we have no ways to say test
> > passed or failed.
> >
> > So let's print a message and move forward in case sink crc
> > cannot help us to know if the screen has been updated.
> >
> > v2: Also include a message on setup_sink_crc and also
> > only skip when it is mandatory, i.e. when running for PSR.
>
> If I assume that the idea you're implementing is what we want, then
> the patch looks correct and Acked-by: Paulo Zanoni
> <paulo.r.zanoni at intel.com> .
>
> My problem is the whole idea of "silently" skipping the tests in case
> the sink CRC fails. What if QA's only machines always have this
> problem with sink CRCs and always skip every single PSR test during
> automatic testing? We won't discover that it's skipping, and we'll
> end
> up assuming PSR works due to no test failures, while in fact it's not
> even being tested. That said, I don't really have a solution for
> this.
Yeah, this is a good point. This is one of the reasons I want to add
that aux fix soon as well. With that in place the sink CRC is not that
unreliable and if skip will be rare and random.
I run the tests in many different platforms here and many times and it
is really rare to skip so I prefer to skip when that happens than have
new bug entry for every false positive that might randomly happen.
Also we know it is a sink CRC issue and not a PSR one, but people
looking to the test will believe that PSR failed and not sink crc...
> Maybe someone else could have an idea here?
>
> >
> > Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> > ---
> > tests/kms_frontbuffer_tracking.c | 37 +++++++++++++++++++++++++---
> > ---------
> > 1 file changed, 25 insertions(+), 12 deletions(-)
> >
> > diff --git a/tests/kms_frontbuffer_tracking.c
> > b/tests/kms_frontbuffer_tracking.c
> > index ddcec75..e200975 100644
> > --- a/tests/kms_frontbuffer_tracking.c
> > +++ b/tests/kms_frontbuffer_tracking.c
> > @@ -859,12 +859,22 @@ static bool psr_wait_until_enabled(void)
> > #define psr_enable() igt_set_module_param_int("enable_psr", 1)
> > #define psr_disable() igt_set_module_param_int("enable_psr", 0)
> >
> > -static void get_sink_crc(sink_crc_t *crc)
> > +static void get_sink_crc(sink_crc_t *crc, bool mandatory)
> > {
> > + int rc, errno_;
> > +
> > lseek(sink_crc.fd, 0, SEEK_SET);
> >
> > - igt_assert(read(sink_crc.fd, crc->data, SINK_CRC_SIZE) ==
> > - SINK_CRC_SIZE);
> > + rc = read(sink_crc.fd, crc->data, SINK_CRC_SIZE);
> > + errno_ = errno;
> > +
> > + if (rc == -1 && errno_ == ETIMEDOUT) {
> > + if (mandatory)
> > + igt_skip("Sink CRC is unreliable on this
> > machine. Try running this test again individually\n");
> > + else
> > + igt_info("Sink CRC is unreliable on this
> > machine. Try running this test again individually\n");
> > + }
> > + igt_assert(rc == SINK_CRC_SIZE);
> > }
> >
> > static bool sink_crc_equal(sink_crc_t *a, sink_crc_t *b)
> > @@ -1148,17 +1158,17 @@ static void print_crc(const char *str,
> > struct both_crcs *crc)
> > free(pipe_str);
> > }
> >
> > -static void collect_crcs(struct both_crcs *crcs)
> > +static void collect_crcs(struct both_crcs *crcs, bool
> > mandatory_sink_crc)
> > {
> > igt_pipe_crc_collect_crc(pipe_crc, &crcs->pipe);
> >
> > if (sink_crc.supported)
> > - get_sink_crc(&crcs->sink);
> > + get_sink_crc(&crcs->sink, mandatory_sink_crc);
> > else
> > memcpy(&crcs->sink, "unsupported!", SINK_CRC_SIZE);
> > }
> >
> > -static void init_blue_crc(enum pixel_format format)
> > +static void init_blue_crc(enum pixel_format format, bool
> > mandatory_sink_crc)
> > {
> > struct igt_fb blue;
> > int rc;
> > @@ -1176,7 +1186,7 @@ static void init_blue_crc(enum pixel_format
> > format)
> > blue.fb_id, 0, 0,
> > &prim_mode_params.connector_id, 1,
> > prim_mode_params.mode);
> > igt_assert_eq(rc, 0);
> > - collect_crcs(&blue_crcs[format].crc);
> > + collect_crcs(&blue_crcs[format].crc, mandatory_sink_crc);
> >
> > print_crc("Blue CRC: ", &blue_crcs[format].crc);
> >
> > @@ -1188,7 +1198,8 @@ static void init_blue_crc(enum pixel_format
> > format)
> > }
> >
> > static void init_crcs(enum pixel_format format,
> > - struct draw_pattern_info *pattern)
> > + struct draw_pattern_info *pattern,
> > + bool mandatory_sink_crc)
> > {
> > int r, r_, rc;
> > struct igt_fb tmp_fbs[pattern->n_rects];
> > @@ -1224,7 +1235,7 @@ static void init_crcs(enum pixel_format
> > format,
> > &prim_mode_params.connector_id,
> > 1,
> > prim_mode_params.mode);
> > igt_assert_eq(rc, 0);
> > - collect_crcs(&pattern->crcs[format][r]);
> > + collect_crcs(&pattern->crcs[format][r],
> > mandatory_sink_crc);
> > }
> >
> > for (r = 0; r < pattern->n_rects; r++) {
> > @@ -1345,6 +1356,8 @@ static void setup_sink_crc(void)
> > errno_ = errno;
> > if (rc == -1 && errno_ == ENOTTY)
> > igt_info("Sink CRC not supported: panel doesn't
> > support it\n");
> > + if (rc == -1 && errno_ == ETIMEDOUT)
> > + igt_info("Sink CRC not reliable on this panel:
> > skipping it\n");
> > else if (rc == SINK_CRC_SIZE)
> > sink_crc.supported = true;
> > else
> > @@ -1577,7 +1590,7 @@ static int adjust_assertion_flags(const
> > struct test_mode *t, int flags)
> > if (!opt.check_crc || (flags__ & DONT_ASSERT_CRC))
> > \
> > break;
> > \
> >
> > \
> > - collect_crcs(&crc_);
> > \
> > + collect_crcs(&crc_, mandatory_sink_crc);
> > \
> > print_crc("Calculated CRC:", &crc_);
> > \
> >
> > \
> > igt_assert(wanted_crc);
> > \
> > @@ -1797,9 +1810,9 @@ static void prepare_subtest_data(const struct
> > test_mode *t,
> >
> > unset_all_crtcs();
> >
> > - init_blue_crc(t->format);
> > + init_blue_crc(t->format, t->feature & FEATURE_PSR);
> > if (pattern)
> > - init_crcs(t->format, pattern);
> > + init_crcs(t->format, pattern, t->feature &
> > FEATURE_PSR);
> >
> > enable_features_for_test(t);
> > }
> > --
> > 2.4.3
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>
>
More information about the Intel-gfx
mailing list