2009-01-21 01:41:26

by Jaswinder Singh Rajput

[permalink] [raw]
Subject: Confusion in usr/include/linux/videodev.h

usr/include/linux/videodev.h is giving 2 warnings in 'make headers_check':
usr/include/linux/videodev.h:19: leaks CONFIG_VIDEO to userspace where it is not valid
usr/include/linux/videodev.h:314: leaks CONFIG_VIDEO to userspace where it is not valid

Whole file is covered with #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)

It means this file is only valid for kernel mode if CONFIG_VIDEO_V4L1_COMPAT is defined but in user mode it is always valid.

Can we choose some better alternative Or can we use this file as:

#ifdef CONFIG_VIDEO_V4L1_COMPAT
#include <linux/videodev.h>
#endif


Thanks
--
JSR


2009-01-21 01:51:29

by Mauro Carvalho Chehab

[permalink] [raw]
Subject: Re: Confusion in usr/include/linux/videodev.h

On Wed, 21 Jan 2009 07:10:38 +0530
Jaswinder Singh Rajput <[email protected]> wrote:

> usr/include/linux/videodev.h is giving 2 warnings in 'make headers_check':
> usr/include/linux/videodev.h:19: leaks CONFIG_VIDEO to userspace where it is not valid
> usr/include/linux/videodev.h:314: leaks CONFIG_VIDEO to userspace where it is not valid
>
> Whole file is covered with #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
>
> It means this file is only valid for kernel mode if CONFIG_VIDEO_V4L1_COMPAT is defined but in user mode it is always valid.
>
> Can we choose some better alternative Or can we use this file as:
>
> #ifdef CONFIG_VIDEO_V4L1_COMPAT
> #include <linux/videodev.h>
> #endif

This is somewhat like what we have on audio devices (where there are OSS and ALSA API's).

V4L1 is the old deprecated userspace API for video devices. It is still
required by some userspace applications. So, on userspace, it should be
included. Also, this allows that one userspace app to be compatible with both
V4L2 API (the current one) and the legacy V4L1 one.

It should be noticed that are still a few drivers using the legacy API yet to
be converted.

Cheers,
Mauro

2009-01-21 04:44:20

by Jaswinder Singh

[permalink] [raw]
Subject: Re: Confusion in usr/include/linux/videodev.h

On Wed, Jan 21, 2009 at 7:20 AM, Mauro Carvalho Chehab
<[email protected]> wrote:
> On Wed, 21 Jan 2009 07:10:38 +0530
> Jaswinder Singh Rajput <[email protected]> wrote:
>
>> usr/include/linux/videodev.h is giving 2 warnings in 'make headers_check':
>> usr/include/linux/videodev.h:19: leaks CONFIG_VIDEO to userspace where it is not valid
>> usr/include/linux/videodev.h:314: leaks CONFIG_VIDEO to userspace where it is not valid
>>
>> Whole file is covered with #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
>>
>> It means this file is only valid for kernel mode if CONFIG_VIDEO_V4L1_COMPAT is defined but in user mode it is always valid.
>>
>> Can we choose some better alternative Or can we use this file as:
>>
>> #ifdef CONFIG_VIDEO_V4L1_COMPAT
>> #include <linux/videodev.h>
>> #endif
>
> This is somewhat like what we have on audio devices (where there are OSS and ALSA API's).
>
> V4L1 is the old deprecated userspace API for video devices. It is still
> required by some userspace applications. So, on userspace, it should be
> included. Also, this allows that one userspace app to be compatible with both
> V4L2 API (the current one) and the legacy V4L1 one.
>
> It should be noticed that are still a few drivers using the legacy API yet to
> be converted.
>

If you have no objections then I will make a patchset which do followings:
1. Remove #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined
(__KERNEL__) from include/linux/videodev.h
2. cover all #include <linux/videodev.h> with #ifdef
CONFIG_VIDEO_V4L1_COMPAT in kernel

By this way, we can satisfy both kernel space and userspace issue and
also get rid of above warnings.

If you have better suggestion then let me know.

Thanks,

--
JSR

2009-01-21 08:54:25

by Trent Piepho

[permalink] [raw]
Subject: Re: Confusion in usr/include/linux/videodev.h

On Wed, 21 Jan 2009, Jaswinder Singh Rajput wrote:
> On Wed, Jan 21, 2009 at 7:20 AM, Mauro Carvalho Chehab
> <[email protected]> wrote:
> > On Wed, 21 Jan 2009 07:10:38 +0530
> > Jaswinder Singh Rajput <[email protected]> wrote:
> >
> >> usr/include/linux/videodev.h is giving 2 warnings in 'make headers_check':
> >> usr/include/linux/videodev.h:19: leaks CONFIG_VIDEO to userspace where it is not valid
> >> usr/include/linux/videodev.h:314: leaks CONFIG_VIDEO to userspace where it is not valid
> >>
> >> Whole file is covered with #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
> >>
> >> It means this file is only valid for kernel mode if CONFIG_VIDEO_V4L1_COMPAT is defined but in user mode it is always valid.
> >
> > V4L1 is the old deprecated userspace API for video devices. It is still
> > required by some userspace applications. So, on userspace, it should be
> > included. Also, this allows that one userspace app to be compatible with both
> > V4L2 API (the current one) and the legacy V4L1 one.
> >
> > It should be noticed that are still a few drivers using the legacy API yet to
> > be converted.
> >
>
> If you have no objections then I will make a patchset which do followings:
> 1. Remove #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined
> (__KERNEL__) from include/linux/videodev.h
> 2. cover all #include <linux/videodev.h> with #ifdef
> CONFIG_VIDEO_V4L1_COMPAT in kernel
>
> By this way, we can satisfy both kernel space and userspace issue and
> also get rid of above warnings.
>
> If you have better suggestion then let me know.

That sounds like it will add a mess of #if's. How about this?

diff -r 29c5787efcda linux/include/linux/videodev.h
--- a/linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800
+++ b/linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800
@@ -15,7 +15,8 @@
#include <linux/ioctl.h>
#include <linux/videodev2.h>

-#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
+#if (defined(__KERNEL__) && defined(CONFIG_VIDEO_V4L1_COMPAT)) \
+ || !defined (__KERNEL__)

#define VID_TYPE_CAPTURE 1 /* Can capture */
#define VID_TYPE_TUNER 2 /* Can tune */

Now CONFIG_VIDEO_V4L1_COMPAT will only be used in the kernel.

2009-01-21 08:59:51

by Jaswinder Singh

[permalink] [raw]
Subject: Re: Confusion in usr/include/linux/videodev.h

On Wed, Jan 21, 2009 at 2:24 PM, Trent Piepho <[email protected]> wrote:
> On Wed, 21 Jan 2009, Jaswinder Singh Rajput wrote:
>> On Wed, Jan 21, 2009 at 7:20 AM, Mauro Carvalho Chehab
>> <[email protected]> wrote:
>> > On Wed, 21 Jan 2009 07:10:38 +0530
>> > Jaswinder Singh Rajput <[email protected]> wrote:
>> >
>> >> usr/include/linux/videodev.h is giving 2 warnings in 'make headers_check':
>> >> usr/include/linux/videodev.h:19: leaks CONFIG_VIDEO to userspace where it is not valid
>> >> usr/include/linux/videodev.h:314: leaks CONFIG_VIDEO to userspace where it is not valid
>> >>
>> >> Whole file is covered with #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
>> >>
>> >> It means this file is only valid for kernel mode if CONFIG_VIDEO_V4L1_COMPAT is defined but in user mode it is always valid.
>> >
>> > V4L1 is the old deprecated userspace API for video devices. It is still
>> > required by some userspace applications. So, on userspace, it should be
>> > included. Also, this allows that one userspace app to be compatible with both
>> > V4L2 API (the current one) and the legacy V4L1 one.
>> >
>> > It should be noticed that are still a few drivers using the legacy API yet to
>> > be converted.
>> >
>>
>> If you have no objections then I will make a patchset which do followings:
>> 1. Remove #if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined
>> (__KERNEL__) from include/linux/videodev.h
>> 2. cover all #include <linux/videodev.h> with #ifdef
>> CONFIG_VIDEO_V4L1_COMPAT in kernel
>>
>> By this way, we can satisfy both kernel space and userspace issue and
>> also get rid of above warnings.
>>
>> If you have better suggestion then let me know.
>
> That sounds like it will add a mess of #if's. How about this?
>
> diff -r 29c5787efcda linux/include/linux/videodev.h
> --- a/linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800
> +++ b/linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800
> @@ -15,7 +15,8 @@
> #include <linux/ioctl.h>
> #include <linux/videodev2.h>
>
> -#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
> +#if (defined(__KERNEL__) && defined(CONFIG_VIDEO_V4L1_COMPAT)) \
> + || !defined (__KERNEL__)
>
> #define VID_TYPE_CAPTURE 1 /* Can capture */
> #define VID_TYPE_TUNER 2 /* Can tune */
>
> Now CONFIG_VIDEO_V4L1_COMPAT will only be used in the kernel.
>

No, this will still give warnings.

Please run 'make headers_check'

--
JSR

2009-01-21 09:09:58

by Arnd Bergmann

[permalink] [raw]
Subject: Re: Confusion in usr/include/linux/videodev.h

On Wednesday 21 January 2009, Jaswinder Singh Rajput wrote:

> > diff -r 29c5787efcda linux/include/linux/videodev.h
> > --- a/linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800
> > +++ b/linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800
> > @@ -15,7 +15,8 @@
> > #include <linux/ioctl.h>
> > #include <linux/videodev2.h>
> >
> > -#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
> > +#if (defined(__KERNEL__) && defined(CONFIG_VIDEO_V4L1_COMPAT)) \
> > + || !defined (__KERNEL__)
> >
> > #define VID_TYPE_CAPTURE 1 /* Can capture */
> > #define VID_TYPE_TUNER 2 /* Can tune */
> >
> > Now CONFIG_VIDEO_V4L1_COMPAT will only be used in the kernel.
> >
>
> No, this will still give warnings.

You could #define another conditional, like this:

#ifndef __KERNEL__
# define __V4L1_COMPAT_API /* Always provide definitions to user space */
#else /* __KERNEL__ */
# ifdef CONFIG_VIDEO_V4L1_COMPAT
# define __V4L1_COMPAT_API
# endif /* CONFIG_VIDEO_V4L1_COMPAT /*
#endif /* __KERNEL__ */

Arnd <><

2009-01-21 09:51:26

by Trent Piepho

[permalink] [raw]
Subject: Re: Confusion in usr/include/linux/videodev.h

On Wed, 21 Jan 2009, Arnd Bergmann wrote:
> On Wednesday 21 January 2009, Jaswinder Singh Rajput wrote:
> > > diff -r 29c5787efcda linux/include/linux/videodev.h
> > > --- a/linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800
> > > +++ b/linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800
> > > @@ -15,7 +15,8 @@
> > > #include <linux/ioctl.h>
> > > #include <linux/videodev2.h>
> > >
> > > -#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
> > > +#if (defined(__KERNEL__) && defined(CONFIG_VIDEO_V4L1_COMPAT)) \
> > > + || !defined (__KERNEL__)
> > >
> > > #define VID_TYPE_CAPTURE 1 /* Can capture */
> > > #define VID_TYPE_TUNER 2 /* Can tune */
> > >
> > > Now CONFIG_VIDEO_V4L1_COMPAT will only be used in the kernel.
> > >
> >
> > No, this will still give warnings.
>
> You could #define another conditional, like this:
>
> #ifndef __KERNEL__
> # define __V4L1_COMPAT_API /* Always provide definitions to user space */
> #else /* __KERNEL__ */
> # ifdef CONFIG_VIDEO_V4L1_COMPAT
> # define __V4L1_COMPAT_API
> # endif /* CONFIG_VIDEO_V4L1_COMPAT /*
> #endif /* __KERNEL__ */

I see what the real problem is now, the unifdef program isn't smart enough
to realize that it knows the result of !defined(__KERNEL__) || defined(FOO)
and so it keeps those ifdefs in when it should be able to remove them.

This works too:

#ifndef __KERNEL__
# define __V4L1_COMPAT_API /* Always provide definitions to user space */
#elif defined(CONFIG_VIDEO_V4L1_COMPAT) /* __KERNEL__ */
# define __V4L1_COMPAT_API
#endif /* CONFIG_VIDEO_V4L1_COMPAT */