uvc: Forward compat ioctls to their handlers directly
The current code goes through a lot of indirection just to call a known handler. Simplify it: just call the handlers directly. Cc: stable@vger.kernel.org Signed-off-by: Andy Lutomirski <luto@kernel.org>
This commit is contained in:
parent
af8c34ce6a
commit
a44323e2a8
@ -1408,47 +1408,44 @@ static int uvc_v4l2_put_xu_query(const struct uvc_xu_control_query *kp,
|
||||
static long uvc_v4l2_compat_ioctl32(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct uvc_fh *handle = file->private_data;
|
||||
union {
|
||||
struct uvc_xu_control_mapping xmap;
|
||||
struct uvc_xu_control_query xqry;
|
||||
} karg;
|
||||
void __user *up = compat_ptr(arg);
|
||||
mm_segment_t old_fs;
|
||||
long ret;
|
||||
|
||||
switch (cmd) {
|
||||
case UVCIOC_CTRL_MAP32:
|
||||
cmd = UVCIOC_CTRL_MAP;
|
||||
ret = uvc_v4l2_get_xu_mapping(&karg.xmap, up);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = uvc_ioctl_ctrl_map(handle->chain, &karg.xmap);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = uvc_v4l2_put_xu_mapping(&karg.xmap, up);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
break;
|
||||
|
||||
case UVCIOC_CTRL_QUERY32:
|
||||
cmd = UVCIOC_CTRL_QUERY;
|
||||
ret = uvc_v4l2_get_xu_query(&karg.xqry, up);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = uvc_xu_ctrl_query(handle->chain, &karg.xqry);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = uvc_v4l2_put_xu_query(&karg.xqry, up);
|
||||
if (ret)
|
||||
return ret;
|
||||
break;
|
||||
|
||||
default:
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
old_fs = get_fs();
|
||||
set_fs(KERNEL_DS);
|
||||
ret = video_ioctl2(file, cmd, (unsigned long)&karg);
|
||||
set_fs(old_fs);
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
switch (cmd) {
|
||||
case UVCIOC_CTRL_MAP:
|
||||
ret = uvc_v4l2_put_xu_mapping(&karg.xmap, up);
|
||||
break;
|
||||
|
||||
case UVCIOC_CTRL_QUERY:
|
||||
ret = uvc_v4l2_put_xu_query(&karg.xqry, up);
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user