Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99c66bc0 authored by Kristian H. Kristensen's avatar Kristian H. Kristensen Committed by Rob Clark
Browse files

drm/msm: Unblock writer if reader closes file



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>
parent ba0ede18
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -115,7 +115,9 @@ static void rd_write(struct msm_rd_state *rd, const void *buf, int sz)
		char *fptr = &fifo->buf[fifo->head];
		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;

		/* Note that smp_load_acquire() is not strictly required
		 * as CIRC_SPACE_TO_END() does not access the tail more
@@ -213,7 +215,10 @@ static int rd_open(struct inode *inode, struct file *file)
static int rd_release(struct inode *inode, struct file *file)
{
	struct msm_rd_state *rd = inode->i_private;

	rd->open = false;
	wake_up_all(&rd->fifo_event);

	return 0;
}