Skip to content

Commit

Permalink
[media] v4l2-dev: remove V4L2_FL_LOCK_ALL_FOPS
Browse files Browse the repository at this point in the history
All drivers that needed V4L2_FL_LOCK_ALL_FOPS have been converted,
so remove this flag altogether.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Hans Verkuil authored and Mauro Carvalho Chehab committed Aug 9, 2012
1 parent f469403 commit cf53373
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 60 deletions.
51 changes: 8 additions & 43 deletions drivers/media/video/v4l2-dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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)
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
21 changes: 7 additions & 14 deletions drivers/media/video/videobuf2-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
Expand All @@ -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;
Expand All @@ -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;
}
Expand All @@ -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,
Expand All @@ -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;
Expand All @@ -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;
}
Expand Down
3 changes: 0 additions & 3 deletions include/media/v4l2-dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand Down

0 comments on commit cf53373

Please sign in to comment.