summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/i915/i915_irq.c
diff options
context:
space:
mode:
authorDamien Lespiau <damien.lespiau@intel.com>2013-10-15 18:55:40 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-10-16 13:32:16 +0200
commit071444280bcbb96ec38a1fb1ee3924ca7860844a (patch)
tree49171943b164c5f1c00fc3418e43500834e9e681 /drivers/gpu/drm/i915/i915_irq.c
parent497666d80587933fc65dbe40d8fe6b6cc89ac9ad (diff)
downloadlwn-071444280bcbb96ec38a1fb1ee3924ca7860844a.tar.gz
lwn-071444280bcbb96ec38a1fb1ee3924ca7860844a.zip
drm/i915: Implement blocking read for pipe CRC files
seq_file is not quite the right interface for these ones. We have a circular buffer with a new entry per vblank on one side and a process wanting to dequeue the CRC with a read(). It's quite racy to wait for vblank in user land and then try to read a pipe_crc file, sometimes the CRC interrupt hasn't been fired and we end up with an EOF. So, let's have the read on the pipe_crc file block until the interrupt gives us a new entry. At that point we can wake the reading process. Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_irq.c')
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index b201a214279e..b2be05791b2f 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1221,6 +1221,8 @@ static void ivb_pipe_crc_update(struct drm_device *dev, enum pipe pipe)
head = (head + 1) & (INTEL_PIPE_CRC_ENTRIES_NR - 1);
atomic_set(&pipe_crc->head, head);
+
+ wake_up_interruptible(&pipe_crc->wq);
}
#else
static void ivb_pipe_crc_update(struct drm_device *dev, int pipe) {}