diff mbox

[i-g-t] tests/kms_pipe_crc_basic: Reset GPU before running subtests

Message ID 1496751646-30358-1-git-send-email-mika.kahola@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Kahola, Mika June 6, 2017, 12:20 p.m. UTC
It has been noticed by our CI BAT testing that in some 1%-3% probability
kms_pipe_crc_basic subtest read-crc-pipe-x-frame-sequence fails when
comparing gathered CRC frames. However, running kms_pipe_crc_basic
subtests alone i.e. outside BAT I was unable to replicate the issue.

The patch proposes a GPU reset before running the subtests. This way we
can ensure that GPU register settings are reinitialized if they have been
altered by the tests executed earlier in BAT.

The issue has been seen on following bug reports
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99788
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100367

Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
 tests/kms_pipe_crc_basic.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Ville Syrjälä June 6, 2017, 12:27 p.m. UTC | #1
On Tue, Jun 06, 2017 at 03:20:46PM +0300, Mika Kahola wrote:
> It has been noticed by our CI BAT testing that in some 1%-3% probability
> kms_pipe_crc_basic subtest read-crc-pipe-x-frame-sequence fails when
> comparing gathered CRC frames. However, running kms_pipe_crc_basic
> subtests alone i.e. outside BAT I was unable to replicate the issue.
> 
> The patch proposes a GPU reset before running the subtests. This way we
> can ensure that GPU register settings are reinitialized if they have been
> altered by the tests executed earlier in BAT.

What does GPU reset have to do with display CRCs?

> 
> The issue has been seen on following bug reports
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99788
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100367
> 
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
>  tests/kms_pipe_crc_basic.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/tests/kms_pipe_crc_basic.c b/tests/kms_pipe_crc_basic.c
> index f49b434..e1940e6 100644
> --- a/tests/kms_pipe_crc_basic.c
> +++ b/tests/kms_pipe_crc_basic.c
> @@ -175,6 +175,13 @@ static void test_read_crc(data_t *data, int pipe, unsigned flags)
>  	igt_require_f(valid_connectors, "No connector found for pipe %i\n", pipe);
>  }
>  
> +static void reset_gpu(void)
> +{
> +	int fd = drm_open_driver(DRIVER_INTEL);
> +	igt_post_hang_ring(fd, igt_hang_ring(fd, I915_EXEC_DEFAULT));
> +	close(fd);
> +}
> +
>  data_t data = {0, };
>  
>  igt_main
> @@ -194,6 +201,9 @@ igt_main
>  		data.debugfs = igt_debugfs_dir(data.drm_fd);
>  	}
>  
> +	/* before running tests, reset gpu */
> +	reset_gpu();
> +
>  	igt_subtest("bad-pipe")
>  		test_bad_command(&data, "pipe D none");
>  
> -- 
> 2.7.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Kahola, Mika June 6, 2017, 12:33 p.m. UTC | #2
On Tue, 2017-06-06 at 15:27 +0300, Ville Syrjälä wrote:
> On Tue, Jun 06, 2017 at 03:20:46PM +0300, Mika Kahola wrote:
> > 
> > It has been noticed by our CI BAT testing that in some 1%-3%
> > probability
> > kms_pipe_crc_basic subtest read-crc-pipe-x-frame-sequence fails
> > when
> > comparing gathered CRC frames. However, running kms_pipe_crc_basic
> > subtests alone i.e. outside BAT I was unable to replicate the
> > issue.
> > 
> > The patch proposes a GPU reset before running the subtests. This
> > way we
> > can ensure that GPU register settings are reinitialized if they
> > have been
> > altered by the tests executed earlier in BAT.
> What does GPU reset have to do with display CRCs?
It's unclear but when you do it I was unable to replicate this in
couple hundred BAT runs. Maybe the error probability just hits below 1%
mark with this.

> 
> > 
> > 
> > The issue has been seen on following bug reports
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99788
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100367
> > 
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > ---
> >  tests/kms_pipe_crc_basic.c | 10 ++++++++++
> >  1 file changed, 10 insertions(+)
> > 
> > diff --git a/tests/kms_pipe_crc_basic.c
> > b/tests/kms_pipe_crc_basic.c
> > index f49b434..e1940e6 100644
> > --- a/tests/kms_pipe_crc_basic.c
> > +++ b/tests/kms_pipe_crc_basic.c
> > @@ -175,6 +175,13 @@ static void test_read_crc(data_t *data, int
> > pipe, unsigned flags)
> >  	igt_require_f(valid_connectors, "No connector found for
> > pipe %i\n", pipe);
> >  }
> >  
> > +static void reset_gpu(void)
> > +{
> > +	int fd = drm_open_driver(DRIVER_INTEL);
> > +	igt_post_hang_ring(fd, igt_hang_ring(fd,
> > I915_EXEC_DEFAULT));
> > +	close(fd);
> > +}
> > +
> >  data_t data = {0, };
> >  
> >  igt_main
> > @@ -194,6 +201,9 @@ igt_main
> >  		data.debugfs = igt_debugfs_dir(data.drm_fd);
> >  	}
> >  
> > +	/* before running tests, reset gpu */
> > +	reset_gpu();
> > +
> >  	igt_subtest("bad-pipe")
> >  		test_bad_command(&data, "pipe D none");
> >  
> > -- 
> > 2.7.4
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Chris Wilson June 6, 2017, 1:23 p.m. UTC | #3
Quoting Mika Kahola (2017-06-06 13:33:14)
> On Tue, 2017-06-06 at 15:27 +0300, Ville Syrjälä wrote:
> > On Tue, Jun 06, 2017 at 03:20:46PM +0300, Mika Kahola wrote:
> > > 
> > > It has been noticed by our CI BAT testing that in some 1%-3%
> > > probability
> > > kms_pipe_crc_basic subtest read-crc-pipe-x-frame-sequence fails
> > > when
> > > comparing gathered CRC frames. However, running kms_pipe_crc_basic
> > > subtests alone i.e. outside BAT I was unable to replicate the
> > > issue.
> > > 
> > > The patch proposes a GPU reset before running the subtests. This
> > > way we
> > > can ensure that GPU register settings are reinitialized if they
> > > have been
> > > altered by the tests executed earlier in BAT.
> > What does GPU reset have to do with display CRCs?
> It's unclear but when you do it I was unable to replicate this in
> couple hundred BAT runs. Maybe the error probability just hits below 1%
> mark with this.

So trace through what side-effect the reset may have and find the bug in
the kernel.
-Chris
Kahola, Mika June 7, 2017, 8 a.m. UTC | #4
On Tue, 2017-06-06 at 14:23 +0100, Chris Wilson wrote:
> Quoting Mika Kahola (2017-06-06 13:33:14)
> > 
> > On Tue, 2017-06-06 at 15:27 +0300, Ville Syrjälä wrote:
> > > 
> > > On Tue, Jun 06, 2017 at 03:20:46PM +0300, Mika Kahola wrote:
> > > > 
> > > > 
> > > > It has been noticed by our CI BAT testing that in some 1%-3%
> > > > probability
> > > > kms_pipe_crc_basic subtest read-crc-pipe-x-frame-sequence fails
> > > > when
> > > > comparing gathered CRC frames. However, running
> > > > kms_pipe_crc_basic
> > > > subtests alone i.e. outside BAT I was unable to replicate the
> > > > issue.
> > > > 
> > > > The patch proposes a GPU reset before running the subtests.
> > > > This
> > > > way we
> > > > can ensure that GPU register settings are reinitialized if they
> > > > have been
> > > > altered by the tests executed earlier in BAT.
> > > What does GPU reset have to do with display CRCs?
> > It's unclear but when you do it I was unable to replicate this in
> > couple hundred BAT runs. Maybe the error probability just hits
> > below 1%
> > mark with this.
> So trace through what side-effect the reset may have and find the bug
> in
> the kernel.
I'm a bit puzzled with this bug. By running the test alone doesn't
trigger the issue but this occurs only when running fast-feedback.
testlist. Maybe tearing down the previous tests cause some sort of
instability which is then triggered when running this test? Any hints
or pointers where to look at?


> -Chris
Chris Wilson June 7, 2017, 10:24 a.m. UTC | #5
Quoting Mika Kahola (2017-06-07 09:00:10)
> On Tue, 2017-06-06 at 14:23 +0100, Chris Wilson wrote:
> > Quoting Mika Kahola (2017-06-06 13:33:14)
> > > 
> > > On Tue, 2017-06-06 at 15:27 +0300, Ville Syrjälä wrote:
> > > > 
> > > > On Tue, Jun 06, 2017 at 03:20:46PM +0300, Mika Kahola wrote:
> > > > > 
> > > > > 
> > > > > It has been noticed by our CI BAT testing that in some 1%-3%
> > > > > probability
> > > > > kms_pipe_crc_basic subtest read-crc-pipe-x-frame-sequence fails
> > > > > when
> > > > > comparing gathered CRC frames. However, running
> > > > > kms_pipe_crc_basic
> > > > > subtests alone i.e. outside BAT I was unable to replicate the
> > > > > issue.
> > > > > 
> > > > > The patch proposes a GPU reset before running the subtests.
> > > > > This
> > > > > way we
> > > > > can ensure that GPU register settings are reinitialized if they
> > > > > have been
> > > > > altered by the tests executed earlier in BAT.
> > > > What does GPU reset have to do with display CRCs?
> > > It's unclear but when you do it I was unable to replicate this in
> > > couple hundred BAT runs. Maybe the error probability just hits
> > > below 1%
> > > mark with this.
> > So trace through what side-effect the reset may have and find the bug
> > in
> > the kernel.
> I'm a bit puzzled with this bug. By running the test alone doesn't
> trigger the issue but this occurs only when running fast-feedback.
> testlist. Maybe tearing down the previous tests cause some sort of
> instability which is then triggered when running this test? Any hints
> or pointers where to look at?

Try forcing a mode change at the start (i.e. -> 1024x768 then back to
preferred) and see if that clears up the residual failures. Either way
(modeset or gpu reset), dump a snapshot of the registers at the start of
a test and after a gpu hang and look at the differences.
-Chris
Kahola, Mika June 7, 2017, 10:50 a.m. UTC | #6
On Wed, 2017-06-07 at 11:24 +0100, Chris Wilson wrote:
> Quoting Mika Kahola (2017-06-07 09:00:10)
> > 
> > On Tue, 2017-06-06 at 14:23 +0100, Chris Wilson wrote:
> > > 
> > > Quoting Mika Kahola (2017-06-06 13:33:14)
> > > > 
> > > > 
> > > > On Tue, 2017-06-06 at 15:27 +0300, Ville Syrjälä wrote:
> > > > > 
> > > > > 
> > > > > On Tue, Jun 06, 2017 at 03:20:46PM +0300, Mika Kahola wrote:
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > It has been noticed by our CI BAT testing that in some 1%-
> > > > > > 3%
> > > > > > probability
> > > > > > kms_pipe_crc_basic subtest read-crc-pipe-x-frame-sequence
> > > > > > fails
> > > > > > when
> > > > > > comparing gathered CRC frames. However, running
> > > > > > kms_pipe_crc_basic
> > > > > > subtests alone i.e. outside BAT I was unable to replicate
> > > > > > the
> > > > > > issue.
> > > > > > 
> > > > > > The patch proposes a GPU reset before running the subtests.
> > > > > > This
> > > > > > way we
> > > > > > can ensure that GPU register settings are reinitialized if
> > > > > > they
> > > > > > have been
> > > > > > altered by the tests executed earlier in BAT.
> > > > > What does GPU reset have to do with display CRCs?
> > > > It's unclear but when you do it I was unable to replicate this
> > > > in
> > > > couple hundred BAT runs. Maybe the error probability just hits
> > > > below 1%
> > > > mark with this.
> > > So trace through what side-effect the reset may have and find the
> > > bug
> > > in
> > > the kernel.
> > I'm a bit puzzled with this bug. By running the test alone doesn't
> > trigger the issue but this occurs only when running fast-feedback.
> > testlist. Maybe tearing down the previous tests cause some sort of
> > instability which is then triggered when running this test? Any
> > hints
> > or pointers where to look at?
> Try forcing a mode change at the start (i.e. -> 1024x768 then back to
> preferred) and see if that clears up the residual failures. Either
> way
> (modeset or gpu reset), dump a snapshot of the registers at the start
> of
> a test and after a gpu hang and look at the differences.
> -Chris
Thanks Chris! I'll try those tricks.
diff mbox

Patch

diff --git a/tests/kms_pipe_crc_basic.c b/tests/kms_pipe_crc_basic.c
index f49b434..e1940e6 100644
--- a/tests/kms_pipe_crc_basic.c
+++ b/tests/kms_pipe_crc_basic.c
@@ -175,6 +175,13 @@  static void test_read_crc(data_t *data, int pipe, unsigned flags)
 	igt_require_f(valid_connectors, "No connector found for pipe %i\n", pipe);
 }
 
+static void reset_gpu(void)
+{
+	int fd = drm_open_driver(DRIVER_INTEL);
+	igt_post_hang_ring(fd, igt_hang_ring(fd, I915_EXEC_DEFAULT));
+	close(fd);
+}
+
 data_t data = {0, };
 
 igt_main
@@ -194,6 +201,9 @@  igt_main
 		data.debugfs = igt_debugfs_dir(data.drm_fd);
 	}
 
+	/* before running tests, reset gpu */
+	reset_gpu();
+
 	igt_subtest("bad-pipe")
 		test_bad_command(&data, "pipe D none");