diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2017-08-04 09:23:28 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2019-02-27 22:04:54 +0000 |
commit | 60b801999c48b6c1dd04e653a38e2e613664264e (patch) | |
tree | e74b6a00562e44d833d450bc9c1c8ab94cc06d48 | |
parent | 979a1bb6ba5a7baefb5125d624d553f66a7a8dae (diff) | |
download | linux-60b801999c48b6c1dd04e653a38e2e613664264e.tar.bz2 |
drm: Wake up next in drm_read() chain if we are forced to putback the event
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
-rw-r--r-- | drivers/gpu/drm/drm_file.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c index ee4df8f8a62d..f782d3103d29 100644 --- a/drivers/gpu/drm/drm_file.c +++ b/drivers/gpu/drm/drm_file.c @@ -567,6 +567,7 @@ put_back_event: file_priv->event_space -= length; list_add(&e->link, &file_priv->event_list); spin_unlock_irq(&dev->event_lock); + wake_up_interruptible(&file_priv->event_wait); break; } |