[Intel-gfx] [PATCH i-g-t 2/5] kms: Add igt_drm_plane_try_commit()

Damien Lespiau damien.lespiau at intel.com
Fri Jun 13 18:24:57 CEST 2014


On Thu, May 29, 2014 at 08:09:14AM -0700, Matt Roper wrote:
> For some of our tests, we want to make sure that bogus plane programming
> attempts fail with the expected error code.  Add
> igt_drm_plane_try_commit() that will just return the error code on
> failure rather than failing the current subtest.  This lets us test the
> return value against the expected error code.
> 
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>

Huum, I was careful not to expose any of the sub-commit functions,
because of atomic modeset.

I don't think we want to expose the commit of a single plane here, so
it'd have to be igt_display_try_commit(). That should be equivalent for
your need but hopefully integrate with the atomic modeset ioctl() as
well.

-- 
Damien

> ---
>  lib/igt_kms.c | 21 ++++++++++++++++++---
>  lib/igt_kms.h |  1 +
>  2 files changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index 97e329b..ce6ea87 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -810,7 +810,11 @@ static int igt_cursor_commit(igt_plane_t *plane, igt_output_t *output)
>  	return 0;
>  }
>  
> -static int igt_drm_plane_commit(igt_plane_t *plane, igt_output_t *output)
> +/*
> + * Attempt to commit a plane; if the DRM call to program the plane fails,
> + * just return an error code (but don't fail the current subtest).
> + */
> +int igt_drm_plane_try_commit(igt_plane_t *plane, igt_output_t *output)
>  {
>  	igt_display_t *display = output->display;
>  	igt_pipe_t *pipe;
> @@ -842,7 +846,8 @@ static int igt_drm_plane_commit(igt_plane_t *plane, igt_output_t *output)
>  				      IGT_FIXED(0,0), /* src_w */
>  				      IGT_FIXED(0,0) /* src_h */);
>  
> -		igt_assert(ret == 0);
> +		if (ret)
> +			return ret;
>  
>  		plane->fb_changed = false;
>  	} else if (plane->fb_changed || plane->position_changed) {
> @@ -866,7 +871,8 @@ static int igt_drm_plane_commit(igt_plane_t *plane, igt_output_t *output)
>  				      IGT_FIXED(plane->fb->width,0), /* src_w */
>  				      IGT_FIXED(plane->fb->height,0) /* src_h */);
>  
> -		igt_assert(ret == 0);
> +		if (ret)
> +			return ret;
>  
>  		plane->fb_changed = false;
>  		plane->position_changed = false;
> @@ -876,6 +882,15 @@ static int igt_drm_plane_commit(igt_plane_t *plane, igt_output_t *output)
>  	return 0;
>  }
>  
> +static int igt_drm_plane_commit(igt_plane_t *plane, igt_output_t *output)
> +{
> +	int ret = igt_drm_plane_try_commit(plane, output);
> +
> +	igt_assert(ret == 0);
> +
> +	return 0;
> +}
> +
>  static int igt_plane_commit(igt_plane_t *plane, igt_output_t *output)
>  {
>  	struct igt_display *display = plane->pipe->display;
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index 4955fc8..2f72a1c 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -157,6 +157,7 @@ void igt_display_use_universal_commits(igt_display_t *display,
>  				       bool use_universal);
>  int  igt_display_commit(igt_display_t *display);
>  int  igt_display_get_n_pipes(igt_display_t *display);
> +int  igt_drm_plane_try_commit(igt_plane_t *plane, igt_output_t *output);
>  
>  const char *igt_output_name(igt_output_t *output);
>  drmModeModeInfo *igt_output_get_mode(igt_output_t *output);
> -- 
> 1.8.5.1
> 
> _______________________________________________
> 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