Hi Laurent,

On Monday 19 December 2011 00:55:44 Laurent Pinchart wrote:
> Drivers implementing custom ioctls need to handle 32-bit/64-bit
> compatibility themselves. Provide them with a way to do so.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> ---
>  drivers/media/video/v4l2-compat-ioctl32.c |   13 ++++++++++---
>  include/media/v4l2-dev.h                  |    3 +++
>  2 files changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/video/v4l2-compat-ioctl32.c
> b/drivers/media/video/v4l2-compat-ioctl32.c index c68531b..5787e57 100644
> --- a/drivers/media/video/v4l2-compat-ioctl32.c
> +++ b/drivers/media/video/v4l2-compat-ioctl32.c
> @@ -16,6 +16,7 @@
>  #include <linux/compat.h>
>  #include <linux/videodev2.h>
>  #include <linux/module.h>
> +#include <media/v4l2-dev.h>
>  #include <media/v4l2-ioctl.h>
> 
>  #ifdef CONFIG_COMPAT
> @@ -937,6 +938,7 @@ static long do_video_ioctl(struct file *file, unsigned
> int cmd, unsigned long ar
> 
>  long v4l2_compat_ioctl32(struct file *file, unsigned int cmd, unsigned
> long arg) {
> +     struct video_device *vdev = video_devdata(file);
>       long ret = -ENOIOCTLCMD;
> 
>       if (!file->f_op->unlocked_ioctl)
> @@ -1023,9 +1025,14 @@ long v4l2_compat_ioctl32(struct file *file, unsigned
> int cmd, unsigned long arg) break;
> 
>       default:
> -             printk(KERN_WARNING "compat_ioctl32: "
> -                     "unknown ioctl '%c', dir=%d, #%d (0x%08x)\n",
> -                     _IOC_TYPE(cmd), _IOC_DIR(cmd), _IOC_NR(cmd), cmd);
> +             if (vdev->fops->compat_ioctl)
> +                     ret = vdev->fops->compat_ioctl(file, cmd, arg);
> +
> +             if (ret == -ENOIOCTLCMD)
> +                     printk(KERN_WARNING "compat_ioctl32: "
> +                             "unknown ioctl '%c', dir=%d, #%d (0x%08x)\n",
> +                             _IOC_TYPE(cmd), _IOC_DIR(cmd), _IOC_NR(cmd),
> +                             cmd);
>               break;
>       }
>       return ret;
> diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
> index c7c40f1..5d4462c 100644
> --- a/include/media/v4l2-dev.h
> +++ b/include/media/v4l2-dev.h
> @@ -62,6 +62,9 @@ struct v4l2_file_operations {
>       unsigned int (*poll) (struct file *, struct poll_table_struct *);
>       long (*ioctl) (struct file *, unsigned int, unsigned long);
>       long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
> +#ifdef CONFIG_COMPAT
> +     long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
> +#endif

My only comment is that I would call this compat_ioctl32 to clearly show that 
this concerns 32/64 bit conversion. Everywhere else it is also called that, so 
we should keep the '32' at the end.

Regards,

        Hans

>       unsigned long (*get_unmapped_area) (struct file *, unsigned long,
>                               unsigned long, unsigned long, unsigned long);
>       int (*mmap) (struct file *, struct vm_area_struct *);
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to