Commit 29f3091a authored by Kristian H. Kristensen's avatar Kristian H. Kristensen Committed by Kleber Sacilotto de Souza

drm/msm: Unblock writer if reader closes file

BugLink: https://bugs.launchpad.net/bugs/1822271

[ Upstream commit 99c66bc0 ]

Prevents deadlock when fifo is full and reader closes file.
Signed-off-by: default avatarKristian H. Kristensen <hoegsberg@chromium.org>
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarStefan Bader <stefan.bader@canonical.com>
Acked-by: default avatarJuerg Haefliger <juerg.haefliger@canonical.com>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
parent 948da95e
...@@ -103,7 +103,9 @@ static void rd_write(struct msm_rd_state *rd, const void *buf, int sz) ...@@ -103,7 +103,9 @@ static void rd_write(struct msm_rd_state *rd, const void *buf, int sz)
char *fptr = &fifo->buf[fifo->head]; char *fptr = &fifo->buf[fifo->head];
int n; int n;
wait_event(rd->fifo_event, circ_space(&rd->fifo) > 0); wait_event(rd->fifo_event, circ_space(&rd->fifo) > 0 || !rd->open);
if (!rd->open)
return;
n = min(sz, circ_space_to_end(&rd->fifo)); n = min(sz, circ_space_to_end(&rd->fifo));
memcpy(fptr, ptr, n); memcpy(fptr, ptr, n);
...@@ -192,7 +194,10 @@ static int rd_open(struct inode *inode, struct file *file) ...@@ -192,7 +194,10 @@ static int rd_open(struct inode *inode, struct file *file)
static int rd_release(struct inode *inode, struct file *file) static int rd_release(struct inode *inode, struct file *file)
{ {
struct msm_rd_state *rd = inode->i_private; struct msm_rd_state *rd = inode->i_private;
rd->open = false; rd->open = false;
wake_up_all(&rd->fifo_event);
return 0; return 0;
} }
......
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