Commit 4beb3b40 authored by Maarten Lankhorst's avatar Maarten Lankhorst

drm/crc: Add support for polling on the data fd.

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: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180202142743.68527-1-maarten.lankhorst@linux.intel.comReviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
[mlankhorst: Use POLLIN|POLLRDNORM, based on Ville's suggestion]
parent bc4fde30
...@@ -307,10 +307,29 @@ static ssize_t crtc_crc_read(struct file *filep, char __user *user_buf, ...@@ -307,10 +307,29 @@ static ssize_t crtc_crc_read(struct file *filep, char __user *user_buf,
return LINE_LEN(crc->values_cnt); 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 | POLLRDNORM;
else
ret = 0;
spin_unlock_irq(&crc->lock);
return ret;
}
static const struct file_operations drm_crtc_crc_data_fops = { static const struct file_operations drm_crtc_crc_data_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = crtc_crc_open, .open = crtc_crc_open,
.read = crtc_crc_read, .read = crtc_crc_read,
.poll = crtc_crc_poll,
.release = crtc_crc_release, .release = crtc_crc_release,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment