Home Home > GIT Browse
diff options
authorChris Wilson <chris@chris-wilson.co.uk>2017-08-04 09:23:28 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-05-31 06:48:31 -0700
commite658aba58f03a040586e5e12ad6ca20f3b1694e6 (patch)
parent00cefe3441d5f97657f2a3b86fe1368ea9a4bfcd (diff)
drm: Wake up next in drm_read() chain if we are forced to putback the event
[ Upstream commit 60b801999c48b6c1dd04e653a38e2e613664264e ] After an event is sent, we try to copy it into the user buffer of the first waiter in drm_read() and if the user buffer doesn't have enough room we put it back onto the list. However, we didn't wake up any subsequent waiter, so that event may sit on the list until either a new vblank event is sent or a new waiter appears. Rare, but in the worst case may lead to a stuck process. Testcase: igt/drm_read/short-buffer-wakeup Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20170804082328.17173-1-chris@chris-wilson.co.uk Signed-off-by: Sasha Levin <sashal@kernel.org>
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index c37b7b5f1dd3..921f7f690ae9 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -515,6 +515,7 @@ put_back_event:
file_priv->event_space -= length;
list_add(&e->link, &file_priv->event_list);
+ wake_up_interruptible(&file_priv->event_wait);