mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 d55875f5d5
			
		
	
	
		d55875f5d5
		
	
	
	
	
		
			
			When running sparse over drivers/media/v4l2-core/v4l2-ioctl.c I get these
errors:
  drivers/media/v4l2-core/v4l2-ioctl.c:2043:9: error: bad integer constant expression
  drivers/media/v4l2-core/v4l2-ioctl.c:2044:9: error: bad integer constant expression
  drivers/media/v4l2-core/v4l2-ioctl.c:2045:9: error: bad integer constant expression
  drivers/media/v4l2-core/v4l2-ioctl.c:2046:9: error: bad integer constant expression
etc.
The root cause of that turns out to be in include/asm-generic/ioctl.h:
#include <uapi/asm-generic/ioctl.h>
/* provoke compile error for invalid uses of size argument */
extern unsigned int __invalid_size_argument_for_IOC;
#define _IOC_TYPECHECK(t) \
        ((sizeof(t) == sizeof(t[1]) && \
          sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
          sizeof(t) : __invalid_size_argument_for_IOC)
If it is defined as this (as is already done if __KERNEL__ is not defined):
  #define _IOC_TYPECHECK(t) (sizeof(t))
then all is well with the world.
This patch allows sparse to work correctly.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
	
			
		
			
				
	
	
		
			18 lines
		
	
	
		
			467 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			18 lines
		
	
	
		
			467 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _ASM_GENERIC_IOCTL_H
 | |
| #define _ASM_GENERIC_IOCTL_H
 | |
| 
 | |
| #include <uapi/asm-generic/ioctl.h>
 | |
| 
 | |
| #ifdef __CHECKER__
 | |
| #define _IOC_TYPECHECK(t) (sizeof(t))
 | |
| #else
 | |
| /* provoke compile error for invalid uses of size argument */
 | |
| extern unsigned int __invalid_size_argument_for_IOC;
 | |
| #define _IOC_TYPECHECK(t) \
 | |
| 	((sizeof(t) == sizeof(t[1]) && \
 | |
| 	  sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
 | |
| 	  sizeof(t) : __invalid_size_argument_for_IOC)
 | |
| #endif
 | |
| 
 | |
| #endif /* _ASM_GENERIC_IOCTL_H */
 |