[igt-dev] [PATCH i-g-t 2/2] tests/kms_async_flips: Skip test when running with Intel's PSR2 selective fetch enabled

Souza, Jose jose.souza at intel.com
Tue Nov 2 03:17:10 UTC 2021


On Mon, 2021-11-01 at 11:27 +0200, Petri Latvala wrote:
> On Fri, Oct 29, 2021 at 05:07:44PM -0700, José Roberto de Souza wrote:
> > Intel's PSR2 selective fetch adds other planes to state when
> > necessary, causing the async flip to fail because async flip is not
> > supported in cursor plane.
> > 
> > Cc: Karthik B S <karthik.b.s at intel.com>
> > Cc: Vandita Kulkarni <vandita.kulkarni at intel.com>
> > Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> > ---
> >  lib/igt_psr.c           | 16 ++++++++++++++++
> >  lib/igt_psr.h           |  2 ++
> >  tests/kms_async_flips.c |  8 ++++++++
> >  3 files changed, 26 insertions(+)
> > 
> > diff --git a/lib/igt_psr.c b/lib/igt_psr.c
> > index 857eb591c..8fa8b192f 100644
> > --- a/lib/igt_psr.c
> > +++ b/lib/igt_psr.c
> > @@ -21,6 +21,7 @@
> >   * IN THE SOFTWARE.
> >   */
> >  
> > +#include "drmtest.h"
> >  #include "igt_params.h"
> >  #include "igt_psr.h"
> >  #include "igt_sysfs.h"
> > @@ -264,3 +265,18 @@ void psr_print_debugfs(int debugfs_fd)
> >  
> >  	igt_info("%s", buf);
> >  }
> > +
> > +bool i915_psr2_selective_fetch_check(int drm_fd)
> > +{
> > +	int debugfs_fd;
> > +	bool ret;
> > +
> > +	if (!is_i915_device(drm_fd))
> > +		return false;
> > +
> > +	debugfs_fd = igt_debugfs_dir(drm_fd);
> > +	ret = psr2_selective_fetch_check(debugfs_fd);
> > +	close(debugfs_fd);
> > +
> > +	return ret;
> > +}
> > diff --git a/lib/igt_psr.h b/lib/igt_psr.h
> > index c47b197b1..a075f336d 100644
> > --- a/lib/igt_psr.h
> > +++ b/lib/igt_psr.h
> > @@ -47,4 +47,6 @@ bool psr_sink_support(int device, int debugfs_fd, enum psr_mode mode);
> >  bool psr2_wait_su(int debugfs_fd, uint16_t *num_su_blocks);
> >  void psr_print_debugfs(int debugfs_fd);
> >  
> > +bool i915_psr2_selective_fetch_check(int drm_fd);
> > +
> >  #endif
> > diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c
> > index 4ff7a196a..c35565f69 100644
> > --- a/tests/kms_async_flips.c
> > +++ b/tests/kms_async_flips.c
> > @@ -27,6 +27,7 @@
> >  
> >  #include "igt.h"
> >  #include "igt_aux.h"
> > +#include "igt_psr.h"
> >  #include <sys/ioctl.h>
> >  #include <sys/time.h>
> >  #include <poll.h>
> > @@ -299,6 +300,13 @@ static void test_cursor(data_t *data)
> >  	struct igt_fb cursor_fb;
> >  	struct drm_mode_cursor cur;
> >  
> > +	/*
> > +	 * Intel's PSR2 selective fetch adds other planes to state when
> > +	 * necessary, causing the async flip to fail because async flip is not
> > +	 * supported in cursor plane.
> > +	 */
> > +	igt_skip_on(i915_psr2_selective_fetch_check(data->drm_fd));
> > +
> 
> Please use the _f variant of this function and add a descriptive
> message to this skip.

Okay

> 
> How does real userspace fare with this stuff? What even are the
> implications, I'm not sure I get this fully. I think I saw you and
> Ville discuss this on IRC but I missed the conclusion and what X does
> on PSR2. Fall back to synchronous flips with some effect on
> performance?

We were discussing on IRC about failures in kms_cursor_legacy.

About async flip, we will inactivate and activate PSR around async flips with a kernel patch to avoid visual corruption:
https://patchwork.freedesktop.org/series/96440/

But even with this kernel patch this test will fail when PSR2 selective fetch is supported because even with PSR2 inactive, i915 will still compute
and add other planes that intersect with damaged areas.
So a page flip in the primary plane will add the cursor plane(as it overlaps) and the cursor plane do not support async flip causing the commit check
to fail and by consequence this test will fail in 'igt_assert(ret == 0);'.

> 
> 



More information about the igt-dev mailing list