Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1552005

Re: [PATCH v14 2/4] drm: crc: Wait for a frame before returning from open()

From Daniel Vetter <daniel@ffwll.ch>
Newsgroups linux.kernel
Subject Re: [PATCH v14 2/4] drm: crc: Wait for a frame before returning from open()
Date 2017-01-05 15:20 +0100
Message-ID <sWh3z-4bP-1@gated-at.bofh.it> (permalink)
References <sVanv-6UV-5@gated-at.bofh.it> <sVaxc-7dZ-49@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Mon, Jan 02, 2017 at 01:59:10PM +0100, Tomeu Vizoso wrote:
> Don't return from the open() call on the crc/data file until the HW has
> produced a first frame, as there's great variability in when the HW is
> able to do that and userspace shouldn't have to guess when this specific
> HW is ready to start giving frame CRCs.
> 
> Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>

Merged the first 2, I guess the 2 i915 patches need to wait for Dave to be
back so that we can resync the trees ...
-Daniel

> ---
> 
>  drivers/gpu/drm/drm_debugfs_crc.c | 23 +++++++++++++++++------
>  1 file changed, 17 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_debugfs_crc.c b/drivers/gpu/drm/drm_debugfs_crc.c
> index 68b171af237b..8b0eeeed4d78 100644
> --- a/drivers/gpu/drm/drm_debugfs_crc.c
> +++ b/drivers/gpu/drm/drm_debugfs_crc.c
> @@ -125,6 +125,12 @@ static const struct file_operations drm_crtc_crc_control_fops = {
>  	.write = crc_control_write
>  };
>  
> +static int crtc_crc_data_count(struct drm_crtc_crc *crc)
> +{
> +	assert_spin_locked(&crc->lock);
> +	return CIRC_CNT(crc->head, crc->tail, DRM_CRC_ENTRIES_NR);
> +}
> +
>  static int crtc_crc_open(struct inode *inode, struct file *filep)
>  {
>  	struct drm_crtc *crtc = inode->i_private;
> @@ -160,8 +166,19 @@ static int crtc_crc_open(struct inode *inode, struct file *filep)
>  	crc->entries = entries;
>  	crc->values_cnt = values_cnt;
>  	crc->opened = true;
> +
> +	/*
> +	 * Only return once we got a first frame, so userspace doesn't have to
> +	 * guess when this particular piece of HW will be ready to start
> +	 * generating CRCs.
> +	 */
> +	ret = wait_event_interruptible_lock_irq(crc->wq,
> +						crtc_crc_data_count(crc),
> +						crc->lock);
>  	spin_unlock_irq(&crc->lock);
>  
> +	WARN_ON(ret);
> +
>  	return 0;
>  
>  err_disable:
> @@ -189,12 +206,6 @@ static int crtc_crc_release(struct inode *inode, struct file *filep)
>  	return 0;
>  }
>  
> -static int crtc_crc_data_count(struct drm_crtc_crc *crc)
> -{
> -	assert_spin_locked(&crc->lock);
> -	return CIRC_CNT(crc->head, crc->tail, DRM_CRC_ENTRIES_NR);
> -}
> -
>  /*
>   * 1 frame field of 10 chars plus a number of CRC fields of 10 chars each, space
>   * separated, with a newline at the end and null-terminated.
> -- 
> 2.9.3
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

Back to linux.kernel | Previous | Next | Find similar | Unroll thread


Thread

Re: [PATCH v14 2/4] drm: crc: Wait for a frame before returning from  open() Daniel Vetter <daniel@ffwll.ch> - 2017-01-05 15:20 +0100

csiph-web