Commit a19a5cd7 authored by Pete Eberlein's avatar Pete Eberlein Committed by Mauro Carvalho Chehab

[media] s2255drv: remove BKL

Remove BKL ioctl and use unlocked_ioctl with core-assisted locking instead.
Signed-off-by: default avatarPete Eberlein <pete@sensoray.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 07e80305
...@@ -268,7 +268,7 @@ struct s2255_dev { ...@@ -268,7 +268,7 @@ struct s2255_dev {
struct v4l2_device v4l2_dev; struct v4l2_device v4l2_dev;
atomic_t num_channels; atomic_t num_channels;
int frames; int frames;
struct mutex lock; struct mutex lock; /* channels[].vdev.lock */
struct mutex open_lock; struct mutex open_lock;
struct usb_device *udev; struct usb_device *udev;
struct usb_interface *interface; struct usb_interface *interface;
...@@ -780,20 +780,14 @@ static struct videobuf_queue_ops s2255_video_qops = { ...@@ -780,20 +780,14 @@ static struct videobuf_queue_ops s2255_video_qops = {
static int res_get(struct s2255_fh *fh) static int res_get(struct s2255_fh *fh)
{ {
struct s2255_dev *dev = fh->dev;
/* is it free? */
struct s2255_channel *channel = fh->channel; struct s2255_channel *channel = fh->channel;
mutex_lock(&dev->lock); /* is it free? */
if (channel->resources) { if (channel->resources)
/* no, someone else uses it */ return 0; /* no, someone else uses it */
mutex_unlock(&dev->lock);
return 0;
}
/* it's free, grab it */ /* it's free, grab it */
channel->resources = 1; channel->resources = 1;
fh->resources = 1; fh->resources = 1;
dprintk(1, "s2255: res: get\n"); dprintk(1, "s2255: res: get\n");
mutex_unlock(&dev->lock);
return 1; return 1;
} }
...@@ -811,11 +805,8 @@ static int res_check(struct s2255_fh *fh) ...@@ -811,11 +805,8 @@ static int res_check(struct s2255_fh *fh)
static void res_free(struct s2255_fh *fh) static void res_free(struct s2255_fh *fh)
{ {
struct s2255_channel *channel = fh->channel; struct s2255_channel *channel = fh->channel;
struct s2255_dev *dev = fh->dev;
mutex_lock(&dev->lock);
channel->resources = 0; channel->resources = 0;
fh->resources = 0; fh->resources = 0;
mutex_unlock(&dev->lock);
dprintk(1, "res: put\n"); dprintk(1, "res: put\n");
} }
...@@ -1218,7 +1209,6 @@ static int s2255_set_mode(struct s2255_channel *channel, ...@@ -1218,7 +1209,6 @@ static int s2255_set_mode(struct s2255_channel *channel,
__le32 *buffer; __le32 *buffer;
unsigned long chn_rev; unsigned long chn_rev;
struct s2255_dev *dev = to_s2255_dev(channel->vdev.v4l2_dev); struct s2255_dev *dev = to_s2255_dev(channel->vdev.v4l2_dev);
mutex_lock(&dev->lock);
chn_rev = G_chnmap[channel->idx]; chn_rev = G_chnmap[channel->idx];
dprintk(3, "%s channel: %d\n", __func__, channel->idx); dprintk(3, "%s channel: %d\n", __func__, channel->idx);
/* if JPEG, set the quality */ /* if JPEG, set the quality */
...@@ -1235,7 +1225,6 @@ static int s2255_set_mode(struct s2255_channel *channel, ...@@ -1235,7 +1225,6 @@ static int s2255_set_mode(struct s2255_channel *channel,
buffer = kzalloc(512, GFP_KERNEL); buffer = kzalloc(512, GFP_KERNEL);
if (buffer == NULL) { if (buffer == NULL) {
dev_err(&dev->udev->dev, "out of mem\n"); dev_err(&dev->udev->dev, "out of mem\n");
mutex_unlock(&dev->lock);
return -ENOMEM; return -ENOMEM;
} }
/* set the mode */ /* set the mode */
...@@ -1260,7 +1249,6 @@ static int s2255_set_mode(struct s2255_channel *channel, ...@@ -1260,7 +1249,6 @@ static int s2255_set_mode(struct s2255_channel *channel,
} }
/* clear the restart flag */ /* clear the restart flag */
channel->mode.restart = 0; channel->mode.restart = 0;
mutex_unlock(&dev->lock);
dprintk(1, "%s chn %d, result: %d\n", __func__, channel->idx, res); dprintk(1, "%s chn %d, result: %d\n", __func__, channel->idx, res);
return res; return res;
} }
...@@ -1271,13 +1259,11 @@ static int s2255_cmd_status(struct s2255_channel *channel, u32 *pstatus) ...@@ -1271,13 +1259,11 @@ static int s2255_cmd_status(struct s2255_channel *channel, u32 *pstatus)
__le32 *buffer; __le32 *buffer;
u32 chn_rev; u32 chn_rev;
struct s2255_dev *dev = to_s2255_dev(channel->vdev.v4l2_dev); struct s2255_dev *dev = to_s2255_dev(channel->vdev.v4l2_dev);
mutex_lock(&dev->lock);
chn_rev = G_chnmap[channel->idx]; chn_rev = G_chnmap[channel->idx];
dprintk(4, "%s chan %d\n", __func__, channel->idx); dprintk(4, "%s chan %d\n", __func__, channel->idx);
buffer = kzalloc(512, GFP_KERNEL); buffer = kzalloc(512, GFP_KERNEL);
if (buffer == NULL) { if (buffer == NULL) {
dev_err(&dev->udev->dev, "out of mem\n"); dev_err(&dev->udev->dev, "out of mem\n");
mutex_unlock(&dev->lock);
return -ENOMEM; return -ENOMEM;
} }
/* form the get vid status command */ /* form the get vid status command */
...@@ -1297,7 +1283,6 @@ static int s2255_cmd_status(struct s2255_channel *channel, u32 *pstatus) ...@@ -1297,7 +1283,6 @@ static int s2255_cmd_status(struct s2255_channel *channel, u32 *pstatus)
} }
*pstatus = channel->vidstatus; *pstatus = channel->vidstatus;
dprintk(4, "%s, vid status %d\n", __func__, *pstatus); dprintk(4, "%s, vid status %d\n", __func__, *pstatus);
mutex_unlock(&dev->lock);
return res; return res;
} }
...@@ -1816,7 +1801,8 @@ static int s2255_open(struct file *file) ...@@ -1816,7 +1801,8 @@ static int s2255_open(struct file *file)
NULL, &dev->slock, NULL, &dev->slock,
fh->type, fh->type,
V4L2_FIELD_INTERLACED, V4L2_FIELD_INTERLACED,
sizeof(struct s2255_buffer), fh, NULL); sizeof(struct s2255_buffer),
fh, vdev->lock);
return 0; return 0;
} }
...@@ -1899,7 +1885,7 @@ static const struct v4l2_file_operations s2255_fops_v4l = { ...@@ -1899,7 +1885,7 @@ static const struct v4l2_file_operations s2255_fops_v4l = {
.open = s2255_open, .open = s2255_open,
.release = s2255_release, .release = s2255_release,
.poll = s2255_poll, .poll = s2255_poll,
.ioctl = video_ioctl2, /* V4L2 ioctl handler */ .unlocked_ioctl = video_ioctl2, /* V4L2 ioctl handler */
.mmap = s2255_mmap_v4l, .mmap = s2255_mmap_v4l,
}; };
...@@ -1969,6 +1955,7 @@ static int s2255_probe_v4l(struct s2255_dev *dev) ...@@ -1969,6 +1955,7 @@ static int s2255_probe_v4l(struct s2255_dev *dev)
channel->vidq.dev = dev; channel->vidq.dev = dev;
/* register 4 video devices */ /* register 4 video devices */
channel->vdev = template; channel->vdev = template;
channel->vdev.lock = &dev->lock;
channel->vdev.v4l2_dev = &dev->v4l2_dev; channel->vdev.v4l2_dev = &dev->v4l2_dev;
video_set_drvdata(&channel->vdev, channel); video_set_drvdata(&channel->vdev, channel);
if (video_nr == -1) if (video_nr == -1)
...@@ -2675,7 +2662,9 @@ static void s2255_disconnect(struct usb_interface *interface) ...@@ -2675,7 +2662,9 @@ static void s2255_disconnect(struct usb_interface *interface)
struct s2255_dev *dev = to_s2255_dev(usb_get_intfdata(interface)); struct s2255_dev *dev = to_s2255_dev(usb_get_intfdata(interface));
int i; int i;
int channels = atomic_read(&dev->num_channels); int channels = atomic_read(&dev->num_channels);
mutex_lock(&dev->lock);
v4l2_device_disconnect(&dev->v4l2_dev); v4l2_device_disconnect(&dev->v4l2_dev);
mutex_unlock(&dev->lock);
/*see comments in the uvc_driver.c usb disconnect function */ /*see comments in the uvc_driver.c usb disconnect function */
atomic_inc(&dev->num_channels); atomic_inc(&dev->num_channels);
/* unregister each video device. */ /* unregister each video device. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment