This will make it possible for userspace to know whether reading
will block, without blocking on the fd. This makes it possible to
drain all queued CRC's in blocking mode, without having to reopen
the fd.

Signed-off-by: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
---
 drivers/gpu/drm/drm_debugfs_crc.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/drivers/gpu/drm/drm_debugfs_crc.c 
b/drivers/gpu/drm/drm_debugfs_crc.c
index 9dd879589a2c..8af1a74ec64d 100644
--- a/drivers/gpu/drm/drm_debugfs_crc.c
+++ b/drivers/gpu/drm/drm_debugfs_crc.c
@@ -307,10 +307,29 @@ static ssize_t crtc_crc_read(struct file *filep, char 
__user *user_buf,
        return LINE_LEN(crc->values_cnt);
 }
 
+static unsigned int crtc_crc_poll(struct file *file, poll_table *wait)
+{
+       struct drm_crtc *crtc = file->f_inode->i_private;
+       struct drm_crtc_crc *crc = &crtc->crc;
+       unsigned ret;
+
+       poll_wait(file, &crc->wq, wait);
+
+       spin_lock_irq(&crc->lock);
+       if (crc->source && crtc_crc_data_count(crc))
+               ret = POLLIN;
+       else
+               ret = 0;
+       spin_unlock_irq(&crc->lock);
+
+       return ret;
+}
+
 static const struct file_operations drm_crtc_crc_data_fops = {
        .owner = THIS_MODULE,
        .open = crtc_crc_open,
        .read = crtc_crc_read,
+       .poll = crtc_crc_poll,
        .release = crtc_crc_release,
 };
 
-- 
2.15.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to