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@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel