]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.9.180/drm-wake-up-next-in-drm_read-chain-if-we-are-forced-.patch
Linux 4.9.180
[thirdparty/kernel/stable-queue.git] / releases / 4.9.180 / drm-wake-up-next-in-drm_read-chain-if-we-are-forced-.patch
CommitLineData
2f47b8fc
SL
1From 0a1dd9752b7498685b51a74d341fe540ab8be7e3 Mon Sep 17 00:00:00 2001
2From: Chris Wilson <chris@chris-wilson.co.uk>
3Date: Fri, 4 Aug 2017 09:23:28 +0100
4Subject: drm: Wake up next in drm_read() chain if we are forced to putback the
5 event
6MIME-Version: 1.0
7Content-Type: text/plain; charset=UTF-8
8Content-Transfer-Encoding: 8bit
9
10[ Upstream commit 60b801999c48b6c1dd04e653a38e2e613664264e ]
11
12After an event is sent, we try to copy it into the user buffer of the
13first waiter in drm_read() and if the user buffer doesn't have enough
14room we put it back onto the list. However, we didn't wake up any
15subsequent waiter, so that event may sit on the list until either a new
16vblank event is sent or a new waiter appears. Rare, but in the worst
17case may lead to a stuck process.
18
19Testcase: igt/drm_read/short-buffer-wakeup
20Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
21Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
22Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
23Link: https://patchwork.freedesktop.org/patch/msgid/20170804082328.17173-1-chris@chris-wilson.co.uk
24Signed-off-by: Sasha Levin <sashal@kernel.org>
25---
26 drivers/gpu/drm/drm_fops.c | 1 +
27 1 file changed, 1 insertion(+)
28
29diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
30index c37b7b5f1dd31..921f7f690ae9b 100644
31--- a/drivers/gpu/drm/drm_fops.c
32+++ b/drivers/gpu/drm/drm_fops.c
33@@ -515,6 +515,7 @@ ssize_t drm_read(struct file *filp, char __user *buffer,
34 file_priv->event_space -= length;
35 list_add(&e->link, &file_priv->event_list);
36 spin_unlock_irq(&dev->event_lock);
37+ wake_up_interruptible(&file_priv->event_wait);
38 break;
39 }
40
41--
422.20.1
43