commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=e2e35183c7ec8525f3fa532463465936c2de200d
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk

Core lock only cares about ioctl ops now. Add lock for mmap/poll
file ops in driver.

Signed-off-by: Scott Jiang <[email protected]>
---
 drivers/media/platform/blackfin/bfin_display.c |   30 +++++++++++++++++------
 1 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/drivers/media/platform/blackfin/bfin_display.c b/drivers/media/platform/blackfin/bfin_display.c
index 6ae1203..d6091eb 100644
--- a/drivers/media/platform/blackfin/bfin_display.c
+++ b/drivers/media/platform/blackfin/bfin_display.c
@@ -245,8 +245,13 @@ static int disp_release(struct file *file)
 static int disp_mmap(struct file *file, struct vm_area_struct *vma)
 {
 	struct disp_device *disp = video_drvdata(file);
+	int ret;
 
-	return vb2_mmap(&disp->buffer_queue, vma);
+	if (mutex_lock_interruptible(&disp->mutex))
+		return -ERESTARTSYS;
+	ret = vb2_mmap(&disp->buffer_queue, vma);
+	mutex_unlock(&disp->mutex);
+	return ret;
 }
 
 #ifndef CONFIG_MMU
@@ -257,20 +262,29 @@ static unsigned long disp_get_unmapped_area(struct file *file,
 					    unsigned long flags)
 {
 	struct disp_device *disp = video_drvdata(file);
+	int ret;
 
-	return vb2_get_unmapped_area(&disp->buffer_queue,
-				     addr,
-				     len,
-				     pgoff,
-				     flags);
+	if (mutex_lock_interruptible(&disp->mutex))
+		return -ERESTARTSYS;
+	ret = vb2_get_unmapped_area(&disp->buffer_queue,
+				    addr,
+				    len,
+				    pgoff,
+				    flags);
+	mutex_unlock(&disp->mutex);
+	return ret;
 }
 #endif
 
 static unsigned int disp_poll(struct file *file, poll_table *wait)
 {
 	struct disp_device *disp = video_drvdata(file);
+	int ret;
 
-	return vb2_poll(&disp->buffer_queue, file, wait);
+	mutex_lock(&disp->mutex);
+	ret = vb2_poll(&disp->buffer_queue, file, wait);
+	mutex_unlock(&disp->mutex);
+	return ret;
 }
 
 static int disp_queue_setup(struct vb2_queue *vq,
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to