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
