Skip to contentSkip to conversation

Confusion in usr/include/linux/videodev.h

DISCUSSION Jaswinder Singh Rajput 5 participants 7 messages Jan 21, 2009 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
Quoted 6 lines · On Wed, 21 Jan 2009 07:10:38 +0530 Jaswinder Singh Rajput…

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__)

Quoted 7 lines

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

#2 lore raw
Quoted 19 lines · Mauro Carvalho Chehab
Quoted 6 lines · On Wed, 21 Jan 2009 07:10:38 +0530 Jaswinder Singh Rajput…

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__)

Quoted 7 lines

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).

Quoted 8 lines

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

#3 lore raw
Quoted 28 lines · Jaswinder Singh Rajput
Quoted 11 lines · Mauro Carvalho Chehab
Quoted 7 lines · On Wed, 21 Jan 2009 07:10:38 +0530 Jaswinder Singh Rajput…

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.

Quoted 8 lines

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

Quoted 4 lines

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?

linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +2 -1
diff -r 29c5787efcda linux/include/linux/videodev.h
@@ -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.

#4 lore raw
Quoted 50 lines · Trent Piepho
Quoted 28 lines · Jaswinder Singh Rajput
Quoted 11 lines · Mauro Carvalho Chehab
Quoted 7 lines · On Wed, 21 Jan 2009 07:10:38 +0530 Jaswinder Singh Rajput…

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.

Quoted 8 lines

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

Quoted 4 lines

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

linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +2 -1
@@ -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 */
Quoted 2 lines

Now CONFIG_VIDEO_V4L1_COMPAT will only be used in the kernel.

No, this will still give warnings.

Please run 'make headers_check'

--
JSR

#5 lore raw
Quoted 11 lines · Jaswinder Singh Rajput
Quoted 11 lines

diff -r 29c5787efcda linux/include/linux/videodev.h

linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +2 -1
@@ -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__)
 
Quoted 7 lines
Quoted 5 lines
linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +0 -0
 #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 <><
#6 lore raw
Quoted 22 lines · Arnd Bergmann
Quoted 11 lines · Jaswinder Singh Rajput
Quoted 11 lines

diff -r 29c5787efcda linux/include/linux/videodev.h

linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +2 -1
@@ -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__)
 
Quoted 7 lines
Quoted 5 lines
linux/include/linux/videodev.h Wed Jan 21 00:51:45 2009 -0800 renamed from linux/include/linux/videodev.h Thu Jan 15 09:07:03 2009 -0800 +0 -0
 #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:

Quoted 7 lines

#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 */