diff options
Diffstat (limited to 'include/linux/kernel.h')
| -rw-r--r-- | include/linux/kernel.h | 34 | 
1 files changed, 28 insertions, 6 deletions
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 5a9d9059520..e2f4d6af212 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -243,6 +243,8 @@ extern int test_taint(unsigned flag);  extern unsigned long get_taint(void);  extern int root_mountflags; +extern bool early_boot_irqs_disabled; +  /* Values used for system_state */  extern enum system_states {  	SYSTEM_BOOTING, @@ -573,12 +575,6 @@ struct sysinfo {  	char _f[20-2*sizeof(long)-sizeof(int)];	/* Padding: libc5 uses this.. */  }; -/* Force a compilation error if condition is true */ -#define BUILD_BUG_ON(condition) ((void)BUILD_BUG_ON_ZERO(condition)) - -/* Force a compilation error if condition is constant and true */ -#define MAYBE_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2 * !!(cond)])) -  /* Force a compilation error if a constant expression is not a power of 2 */  #define BUILD_BUG_ON_NOT_POWER_OF_2(n)			\  	BUILD_BUG_ON((n) == 0 || (((n) & ((n) - 1)) != 0)) @@ -590,6 +586,32 @@ struct sysinfo {  #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))  #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); })) +/** + * BUILD_BUG_ON - break compile if a condition is true. + * @cond: the condition which the compiler should know is false. + * + * If you have some code which relies on certain constants being equal, or + * other compile-time-evaluated condition, you should use BUILD_BUG_ON to + * detect if someone changes it. + * + * The implementation uses gcc's reluctance to create a negative array, but + * gcc (as of 4.4) only emits that error for obvious cases (eg. not arguments + * to inline functions).  So as a fallback we use the optimizer; if it can't + * prove the condition is false, it will cause a link error on the undefined + * "__build_bug_on_failed".  This error message can be harder to track down + * though, hence the two different methods. + */ +#ifndef __OPTIMIZE__ +#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) +#else +extern int __build_bug_on_failed; +#define BUILD_BUG_ON(condition)					\ +	do {							\ +		((void)sizeof(char[1 - 2*!!(condition)]));	\ +		if (condition) __build_bug_on_failed = 1;	\ +	} while(0) +#endif +  /* Trap pasters of __FUNCTION__ at compile-time */  #define __FUNCTION__ (__func__)  |