summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/usbvideo
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2008-07-30 13:43:36 +0200
committerHans Verkuil <hverkuil@xs4all.nl>2008-07-30 13:43:36 +0200
commitc8b5c505811fd4797e0ea35bcc60478d626a0971 (patch)
tree628f97e562257d3dc6c18269b3a520c45873de7d /linux/drivers/media/video/usbvideo
parent4381ceef6895b12019f4d55a6f5ff9629194b259 (diff)
downloadmediapointer-dvb-s2-c8b5c505811fd4797e0ea35bcc60478d626a0971.tar.gz
mediapointer-dvb-s2-c8b5c505811fd4797e0ea35bcc60478d626a0971.tar.bz2
v4l: move BKL down to the driver level.
From: Hans Verkuil <hverkuil@xs4all.nl> The BKL is now moved from the video_open function in v4l2-dev.c to the various drivers. It seems about a third of the drivers already has a lock of some sort protecting the open(), another third uses video_exclusive_open (yuck!) and the last third required adding the BKL in their open function. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Diffstat (limited to 'linux/drivers/media/video/usbvideo')
-rw-r--r--linux/drivers/media/video/usbvideo/vicam.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/linux/drivers/media/video/usbvideo/vicam.c b/linux/drivers/media/video/usbvideo/vicam.c
index e31b64f17..e7330fe4f 100644
--- a/linux/drivers/media/video/usbvideo/vicam.c
+++ b/linux/drivers/media/video/usbvideo/vicam.c
@@ -798,20 +798,24 @@ vicam_open(struct inode *inode, struct file *file)
* rely on this fact forever.
*/
+ lock_kernel();
if (cam->open_count > 0) {
printk(KERN_INFO
"vicam_open called on already opened camera");
+ unlock_kernel();
return -EBUSY;
}
cam->raw_image = kmalloc(VICAM_MAX_READ_SIZE, GFP_KERNEL);
if (!cam->raw_image) {
+ unlock_kernel();
return -ENOMEM;
}
cam->framebuf = rvmalloc(VICAM_MAX_FRAME_SIZE * VICAM_FRAMES);
if (!cam->framebuf) {
kfree(cam->raw_image);
+ unlock_kernel();
return -ENOMEM;
}
@@ -819,6 +823,7 @@ vicam_open(struct inode *inode, struct file *file)
if (!cam->cntrlbuf) {
kfree(cam->raw_image);
rvfree(cam->framebuf, VICAM_MAX_FRAME_SIZE * VICAM_FRAMES);
+ unlock_kernel();
return -ENOMEM;
}
@@ -836,6 +841,7 @@ vicam_open(struct inode *inode, struct file *file)
cam->open_count++;
file->private_data = cam;
+ unlock_kernel();
return 0;
}