Now that it is guaranteed that file->private_data is set to point to the
'struct v4l2_fh' initialised by v4l2_fh_add() the v4l2-ioctl layer can
be modified to retrieve the v4l2_fh pointer from the file *.

As the __video_do_ioctl() function, that calls all the handlers modified
by this patch goes as:

static long __video_do_ioctl(struct file *file,
                unsigned int cmd, void *arg)
{
        void *fh = file->private_data;

        ...

        ret = info->func(ops, file, fh, arg);

}

This patch introduces no functional changes and makes it possible to
remove in future the 'fh' argument to all ioctl handlers.

Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mo...@ideasonboard.com>
---
 drivers/media/v4l2-core/v4l2-ioctl.c | 46 ++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 20 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c 
b/drivers/media/v4l2-core/v4l2-ioctl.c
index 
8c81852c30466865eca36fd41923f6d05dbf9293..44c2f5ef3dae407d9786c5278d13efc982be2ff0
 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -2297,8 +2297,8 @@ static int v4l_queryctrl(const struct v4l2_ioctl_ops *ops,
        struct video_device *vfd = video_devdata(file);
        struct v4l2_query_ext_ctrl qec = {};
        struct v4l2_queryctrl *p = arg;
-       struct v4l2_fh *vfh =
-               test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ? fh : NULL;
+       struct v4l2_fh *vfh = test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ?
+                             file_to_v4l2_fh(file) : NULL;
        int ret;
 
        if (vfh && vfh->ctrl_handler)
@@ -2322,8 +2322,8 @@ static int v4l_query_ext_ctrl(const struct v4l2_ioctl_ops 
*ops,
 {
        struct video_device *vfd = video_devdata(file);
        struct v4l2_query_ext_ctrl *p = arg;
-       struct v4l2_fh *vfh =
-               test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ? fh : NULL;
+       struct v4l2_fh *vfh = test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ?
+                             file_to_v4l2_fh(file) : NULL;
 
        if (vfh && vfh->ctrl_handler)
                return v4l2_query_ext_ctrl(vfh->ctrl_handler, p);
@@ -2339,8 +2339,8 @@ static int v4l_querymenu(const struct v4l2_ioctl_ops *ops,
 {
        struct video_device *vfd = video_devdata(file);
        struct v4l2_querymenu *p = arg;
-       struct v4l2_fh *vfh =
-               test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ? fh : NULL;
+       struct v4l2_fh *vfh = test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ?
+                             file_to_v4l2_fh(file) : NULL;
 
        if (vfh && vfh->ctrl_handler)
                return v4l2_querymenu(vfh->ctrl_handler, p);
@@ -2356,8 +2356,8 @@ static int v4l_g_ctrl(const struct v4l2_ioctl_ops *ops,
 {
        struct video_device *vfd = video_devdata(file);
        struct v4l2_control *p = arg;
-       struct v4l2_fh *vfh =
-               test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ? fh : NULL;
+       struct v4l2_fh *vfh = test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ?
+                             file_to_v4l2_fh(file) : NULL;
        struct v4l2_ext_controls ctrls;
        struct v4l2_ext_control ctrl;
 
@@ -2388,8 +2388,8 @@ static int v4l_s_ctrl(const struct v4l2_ioctl_ops *ops,
 {
        struct video_device *vfd = video_devdata(file);
        struct v4l2_control *p = arg;
-       struct v4l2_fh *vfh =
-               test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ? fh : NULL;
+       struct v4l2_fh *vfh = test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ?
+                             file_to_v4l2_fh(file) : NULL;
        struct v4l2_ext_controls ctrls;
        struct v4l2_ext_control ctrl;
        int ret;
@@ -2418,8 +2418,8 @@ static int v4l_g_ext_ctrls(const struct v4l2_ioctl_ops 
*ops,
 {
        struct video_device *vfd = video_devdata(file);
        struct v4l2_ext_controls *p = arg;
-       struct v4l2_fh *vfh =
-               test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ? fh : NULL;
+       struct v4l2_fh *vfh = test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ?
+                             file_to_v4l2_fh(file) : NULL;
 
        p->error_idx = p->count;
        if (vfh && vfh->ctrl_handler)
@@ -2439,8 +2439,8 @@ static int v4l_s_ext_ctrls(const struct v4l2_ioctl_ops 
*ops,
 {
        struct video_device *vfd = video_devdata(file);
        struct v4l2_ext_controls *p = arg;
-       struct v4l2_fh *vfh =
-               test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ? fh : NULL;
+       struct v4l2_fh *vfh = test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ?
+                             file_to_v4l2_fh(file) : NULL;
 
        p->error_idx = p->count;
        if (vfh && vfh->ctrl_handler)
@@ -2460,8 +2460,8 @@ static int v4l_try_ext_ctrls(const struct v4l2_ioctl_ops 
*ops,
 {
        struct video_device *vfd = video_devdata(file);
        struct v4l2_ext_controls *p = arg;
-       struct v4l2_fh *vfh =
-               test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ? fh : NULL;
+       struct v4l2_fh *vfh = test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ?
+                             file_to_v4l2_fh(file) : NULL;
 
        p->error_idx = p->count;
        if (vfh && vfh->ctrl_handler)
@@ -2756,19 +2756,25 @@ static int v4l_dbg_g_chip_info(const struct 
v4l2_ioctl_ops *ops,
 static int v4l_dqevent(const struct v4l2_ioctl_ops *ops,
                                struct file *file, void *fh, void *arg)
 {
-       return v4l2_event_dequeue(fh, arg, file->f_flags & O_NONBLOCK);
+       struct v4l2_fh *vfh = file_to_v4l2_fh(file);
+
+       return v4l2_event_dequeue(vfh, arg, file->f_flags & O_NONBLOCK);
 }
 
 static int v4l_subscribe_event(const struct v4l2_ioctl_ops *ops,
                                struct file *file, void *fh, void *arg)
 {
-       return ops->vidioc_subscribe_event(fh, arg);
+       struct v4l2_fh *vfh = file_to_v4l2_fh(file);
+
+       return ops->vidioc_subscribe_event(vfh, arg);
 }
 
 static int v4l_unsubscribe_event(const struct v4l2_ioctl_ops *ops,
                                struct file *file, void *fh, void *arg)
 {
-       return ops->vidioc_unsubscribe_event(fh, arg);
+       struct v4l2_fh *vfh = file_to_v4l2_fh(file);
+
+       return ops->vidioc_unsubscribe_event(vfh, arg);
 }
 
 static int v4l_g_sliced_vbi_cap(const struct v4l2_ioctl_ops *ops,
@@ -3072,7 +3078,7 @@ static long __video_do_ioctl(struct file *file,
        bool write_only = false;
        struct v4l2_ioctl_info default_info;
        const struct v4l2_ioctl_info *info;
-       void *fh = file->private_data;
+       void *fh = file_to_v4l2_fh(file);
        struct v4l2_fh *vfh = NULL;
        int dev_debug = vfd->dev_debug;
        long ret = -ENOTTY;

-- 
2.49.0



_______________________________________________
Mjpeg-users mailing list
Mjpeg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mjpeg-users

Reply via email to