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

Petri Latvala petri.latvala at intel.com
Tue Nov 2 09:56:23 UTC 2021


On Tue, Nov 02, 2021 at 05:17:10AM +0200, Souza, Jose wrote:
> 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);'.

Right. So on the scale of "papering over shortcomings" <-> "non-issue,
real userspace has never been promised that this operation will work"
this lands far on the ->

Hence, with a descriptive message on the skip this is
Reviewed-by: Petri Latvala <petri.latvala at intel.com>


More information about the igt-dev mailing list