Loading drivers/media/video/v4l2-dev.c +8 −43 Original line number Diff line number Diff line Loading @@ -298,13 +298,8 @@ static ssize_t v4l2_read(struct file *filp, char __user *buf, if (!vdev->fops->read) return -EINVAL; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && mutex_lock_interruptible(vdev->lock)) return -ERESTARTSYS; if (video_is_registered(vdev)) ret = vdev->fops->read(filp, buf, sz, off); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); if (vdev->debug) printk(KERN_DEBUG "%s: read: %zd (%d)\n", video_device_node_name(vdev), sz, ret); Loading @@ -319,13 +314,8 @@ static ssize_t v4l2_write(struct file *filp, const char __user *buf, if (!vdev->fops->write) return -EINVAL; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && mutex_lock_interruptible(vdev->lock)) return -ERESTARTSYS; if (video_is_registered(vdev)) ret = vdev->fops->write(filp, buf, sz, off); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); if (vdev->debug) printk(KERN_DEBUG "%s: write: %zd (%d)\n", video_device_node_name(vdev), sz, ret); Loading @@ -335,20 +325,16 @@ static ssize_t v4l2_write(struct file *filp, const char __user *buf, static unsigned int v4l2_poll(struct file *filp, struct poll_table_struct *poll) { struct video_device *vdev = video_devdata(filp); int ret = POLLERR | POLLHUP; unsigned int res = POLLERR | POLLHUP; if (!vdev->fops->poll) return DEFAULT_POLLMASK; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_lock(vdev->lock); if (video_is_registered(vdev)) ret = vdev->fops->poll(filp, poll); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); res = vdev->fops->poll(filp, poll); if (vdev->debug) printk(KERN_DEBUG "%s: poll: %08x\n", video_device_node_name(vdev), ret); return ret; video_device_node_name(vdev), res); return res; } static long v4l2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) Loading Loading @@ -432,14 +418,9 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm) int ret = -ENODEV; if (!vdev->fops->mmap) return ret; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && mutex_lock_interruptible(vdev->lock)) return -ERESTARTSYS; return -ENODEV; if (video_is_registered(vdev)) ret = vdev->fops->mmap(filp, vm); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); if (vdev->debug) printk(KERN_DEBUG "%s: mmap (%d)\n", video_device_node_name(vdev), ret); Loading @@ -464,20 +445,12 @@ static int v4l2_open(struct inode *inode, struct file *filp) video_get(vdev); mutex_unlock(&videodev_lock); if (vdev->fops->open) { if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && mutex_lock_interruptible(vdev->lock)) { ret = -ERESTARTSYS; goto err; } if (video_is_registered(vdev)) ret = vdev->fops->open(filp); else ret = -ENODEV; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); } err: if (vdev->debug) printk(KERN_DEBUG "%s: open (%d)\n", video_device_node_name(vdev), ret); Loading @@ -493,16 +466,12 @@ static int v4l2_release(struct inode *inode, struct file *filp) struct video_device *vdev = video_devdata(filp); int ret = 0; if (vdev->fops->release) { if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_lock(vdev->lock); vdev->fops->release(filp); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); } if (vdev->fops->release) ret = vdev->fops->release(filp); if (vdev->debug) printk(KERN_DEBUG "%s: release\n", video_device_node_name(vdev)); /* decrease the refcount unconditionally since the release() return value is ignored. */ video_put(vdev); Loading Loading @@ -882,10 +851,6 @@ int __video_register_device(struct video_device *vdev, int type, int nr, WARN_ON(video_device[vdev->minor] != NULL); vdev->index = get_index(vdev); mutex_unlock(&videodev_lock); /* if no lock was passed, then make sure the LOCK_ALL_FOPS bit is clear and warn if it wasn't. */ if (vdev->lock == NULL) WARN_ON(test_and_clear_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)); if (vdev->ioctl_ops) determine_valid_ioctls(vdev); Loading drivers/media/video/videobuf2-core.c +7 −14 Original line number Diff line number Diff line Loading @@ -2270,10 +2270,9 @@ ssize_t vb2_fop_write(struct file *file, char __user *buf, { struct video_device *vdev = video_devdata(file); struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock; bool must_lock = !test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && lock; int err = -EBUSY; if (must_lock && mutex_lock_interruptible(lock)) if (lock && mutex_lock_interruptible(lock)) return -ERESTARTSYS; if (vb2_queue_is_busy(vdev, file)) goto exit; Loading @@ -2282,7 +2281,7 @@ ssize_t vb2_fop_write(struct file *file, char __user *buf, if (err >= 0) vdev->queue->owner = file->private_data; exit: if (must_lock) if (lock) mutex_unlock(lock); return err; } Loading @@ -2293,10 +2292,9 @@ ssize_t vb2_fop_read(struct file *file, char __user *buf, { struct video_device *vdev = video_devdata(file); struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock; bool must_lock = !test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && vdev->lock; int err = -EBUSY; if (must_lock && mutex_lock_interruptible(lock)) if (lock && mutex_lock_interruptible(lock)) return -ERESTARTSYS; if (vb2_queue_is_busy(vdev, file)) goto exit; Loading @@ -2305,7 +2303,7 @@ ssize_t vb2_fop_read(struct file *file, char __user *buf, if (err >= 0) vdev->queue->owner = file->private_data; exit: if (must_lock) if (lock) mutex_unlock(lock); return err; } Loading @@ -2319,11 +2317,6 @@ unsigned int vb2_fop_poll(struct file *file, poll_table *wait) unsigned long req_events = poll_requested_events(wait); unsigned res; void *fileio; /* Yuck. We really need to get rid of this flag asap. If it is set, then the core took the serialization lock before calling poll(). This is being phased out, but for now we have to handle this case. */ bool locked = test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags); bool must_lock = false; /* Try to be smart: only lock if polling might start fileio, Loading @@ -2339,9 +2332,9 @@ unsigned int vb2_fop_poll(struct file *file, poll_table *wait) /* If locking is needed, but this helper doesn't know how, then you shouldn't be using this helper but you should write your own. */ WARN_ON(must_lock && !locked && !lock); WARN_ON(must_lock && !lock); if (must_lock && !locked && lock && mutex_lock_interruptible(lock)) if (must_lock && lock && mutex_lock_interruptible(lock)) return POLLERR; fileio = q->fileio; Loading @@ -2351,7 +2344,7 @@ unsigned int vb2_fop_poll(struct file *file, poll_table *wait) /* If fileio was started, then we have a new queue owner. */ if (must_lock && !fileio && q->fileio) q->owner = file->private_data; if (must_lock && !locked && lock) if (must_lock && lock) mutex_unlock(lock); return res; } Loading include/media/v4l2-dev.h +0 −3 Original line number Diff line number Diff line Loading @@ -39,9 +39,6 @@ struct v4l2_ctrl_handler; #define V4L2_FL_USES_V4L2_FH (1) /* Use the prio field of v4l2_fh for core priority checking */ #define V4L2_FL_USE_FH_PRIO (2) /* If ioctl core locking is in use, then apply that also to all file operations. Don't use this flag in new drivers! */ #define V4L2_FL_LOCK_ALL_FOPS (3) /* Priority helper functions */ Loading Loading
drivers/media/video/v4l2-dev.c +8 −43 Original line number Diff line number Diff line Loading @@ -298,13 +298,8 @@ static ssize_t v4l2_read(struct file *filp, char __user *buf, if (!vdev->fops->read) return -EINVAL; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && mutex_lock_interruptible(vdev->lock)) return -ERESTARTSYS; if (video_is_registered(vdev)) ret = vdev->fops->read(filp, buf, sz, off); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); if (vdev->debug) printk(KERN_DEBUG "%s: read: %zd (%d)\n", video_device_node_name(vdev), sz, ret); Loading @@ -319,13 +314,8 @@ static ssize_t v4l2_write(struct file *filp, const char __user *buf, if (!vdev->fops->write) return -EINVAL; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && mutex_lock_interruptible(vdev->lock)) return -ERESTARTSYS; if (video_is_registered(vdev)) ret = vdev->fops->write(filp, buf, sz, off); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); if (vdev->debug) printk(KERN_DEBUG "%s: write: %zd (%d)\n", video_device_node_name(vdev), sz, ret); Loading @@ -335,20 +325,16 @@ static ssize_t v4l2_write(struct file *filp, const char __user *buf, static unsigned int v4l2_poll(struct file *filp, struct poll_table_struct *poll) { struct video_device *vdev = video_devdata(filp); int ret = POLLERR | POLLHUP; unsigned int res = POLLERR | POLLHUP; if (!vdev->fops->poll) return DEFAULT_POLLMASK; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_lock(vdev->lock); if (video_is_registered(vdev)) ret = vdev->fops->poll(filp, poll); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); res = vdev->fops->poll(filp, poll); if (vdev->debug) printk(KERN_DEBUG "%s: poll: %08x\n", video_device_node_name(vdev), ret); return ret; video_device_node_name(vdev), res); return res; } static long v4l2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) Loading Loading @@ -432,14 +418,9 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm) int ret = -ENODEV; if (!vdev->fops->mmap) return ret; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && mutex_lock_interruptible(vdev->lock)) return -ERESTARTSYS; return -ENODEV; if (video_is_registered(vdev)) ret = vdev->fops->mmap(filp, vm); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); if (vdev->debug) printk(KERN_DEBUG "%s: mmap (%d)\n", video_device_node_name(vdev), ret); Loading @@ -464,20 +445,12 @@ static int v4l2_open(struct inode *inode, struct file *filp) video_get(vdev); mutex_unlock(&videodev_lock); if (vdev->fops->open) { if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && mutex_lock_interruptible(vdev->lock)) { ret = -ERESTARTSYS; goto err; } if (video_is_registered(vdev)) ret = vdev->fops->open(filp); else ret = -ENODEV; if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); } err: if (vdev->debug) printk(KERN_DEBUG "%s: open (%d)\n", video_device_node_name(vdev), ret); Loading @@ -493,16 +466,12 @@ static int v4l2_release(struct inode *inode, struct file *filp) struct video_device *vdev = video_devdata(filp); int ret = 0; if (vdev->fops->release) { if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_lock(vdev->lock); vdev->fops->release(filp); if (test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)) mutex_unlock(vdev->lock); } if (vdev->fops->release) ret = vdev->fops->release(filp); if (vdev->debug) printk(KERN_DEBUG "%s: release\n", video_device_node_name(vdev)); /* decrease the refcount unconditionally since the release() return value is ignored. */ video_put(vdev); Loading Loading @@ -882,10 +851,6 @@ int __video_register_device(struct video_device *vdev, int type, int nr, WARN_ON(video_device[vdev->minor] != NULL); vdev->index = get_index(vdev); mutex_unlock(&videodev_lock); /* if no lock was passed, then make sure the LOCK_ALL_FOPS bit is clear and warn if it wasn't. */ if (vdev->lock == NULL) WARN_ON(test_and_clear_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags)); if (vdev->ioctl_ops) determine_valid_ioctls(vdev); Loading
drivers/media/video/videobuf2-core.c +7 −14 Original line number Diff line number Diff line Loading @@ -2270,10 +2270,9 @@ ssize_t vb2_fop_write(struct file *file, char __user *buf, { struct video_device *vdev = video_devdata(file); struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock; bool must_lock = !test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && lock; int err = -EBUSY; if (must_lock && mutex_lock_interruptible(lock)) if (lock && mutex_lock_interruptible(lock)) return -ERESTARTSYS; if (vb2_queue_is_busy(vdev, file)) goto exit; Loading @@ -2282,7 +2281,7 @@ ssize_t vb2_fop_write(struct file *file, char __user *buf, if (err >= 0) vdev->queue->owner = file->private_data; exit: if (must_lock) if (lock) mutex_unlock(lock); return err; } Loading @@ -2293,10 +2292,9 @@ ssize_t vb2_fop_read(struct file *file, char __user *buf, { struct video_device *vdev = video_devdata(file); struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock; bool must_lock = !test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags) && vdev->lock; int err = -EBUSY; if (must_lock && mutex_lock_interruptible(lock)) if (lock && mutex_lock_interruptible(lock)) return -ERESTARTSYS; if (vb2_queue_is_busy(vdev, file)) goto exit; Loading @@ -2305,7 +2303,7 @@ ssize_t vb2_fop_read(struct file *file, char __user *buf, if (err >= 0) vdev->queue->owner = file->private_data; exit: if (must_lock) if (lock) mutex_unlock(lock); return err; } Loading @@ -2319,11 +2317,6 @@ unsigned int vb2_fop_poll(struct file *file, poll_table *wait) unsigned long req_events = poll_requested_events(wait); unsigned res; void *fileio; /* Yuck. We really need to get rid of this flag asap. If it is set, then the core took the serialization lock before calling poll(). This is being phased out, but for now we have to handle this case. */ bool locked = test_bit(V4L2_FL_LOCK_ALL_FOPS, &vdev->flags); bool must_lock = false; /* Try to be smart: only lock if polling might start fileio, Loading @@ -2339,9 +2332,9 @@ unsigned int vb2_fop_poll(struct file *file, poll_table *wait) /* If locking is needed, but this helper doesn't know how, then you shouldn't be using this helper but you should write your own. */ WARN_ON(must_lock && !locked && !lock); WARN_ON(must_lock && !lock); if (must_lock && !locked && lock && mutex_lock_interruptible(lock)) if (must_lock && lock && mutex_lock_interruptible(lock)) return POLLERR; fileio = q->fileio; Loading @@ -2351,7 +2344,7 @@ unsigned int vb2_fop_poll(struct file *file, poll_table *wait) /* If fileio was started, then we have a new queue owner. */ if (must_lock && !fileio && q->fileio) q->owner = file->private_data; if (must_lock && !locked && lock) if (must_lock && lock) mutex_unlock(lock); return res; } Loading
include/media/v4l2-dev.h +0 −3 Original line number Diff line number Diff line Loading @@ -39,9 +39,6 @@ struct v4l2_ctrl_handler; #define V4L2_FL_USES_V4L2_FH (1) /* Use the prio field of v4l2_fh for core priority checking */ #define V4L2_FL_USE_FH_PRIO (2) /* If ioctl core locking is in use, then apply that also to all file operations. Don't use this flag in new drivers! */ #define V4L2_FL_LOCK_ALL_FOPS (3) /* Priority helper functions */ Loading