diff options
Diffstat (limited to 'include/asm-generic/bug.h')
| -rw-r--r-- | include/asm-generic/bug.h | 55 | 
1 files changed, 22 insertions, 33 deletions
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index aa6c093d9ce9..384b5c835ced 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h @@ -10,6 +10,7 @@  #define BUGFLAG_WARNING		(1 << 0)  #define BUGFLAG_ONCE		(1 << 1)  #define BUGFLAG_DONE		(1 << 2) +#define BUGFLAG_NO_CUT_HERE	(1 << 3)	/* CUT_HERE already sent */  #define BUGFLAG_TAINT(taint)	((taint) << 8)  #define BUG_GET_TAINT(bug)	((bug)->flags >> 8)  #endif @@ -61,18 +62,6 @@ struct bug_entry {  #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)  #endif -#ifdef __WARN_FLAGS -#define __WARN_TAINT(taint)		__WARN_FLAGS(BUGFLAG_TAINT(taint)) -#define __WARN_ONCE_TAINT(taint)	__WARN_FLAGS(BUGFLAG_ONCE|BUGFLAG_TAINT(taint)) - -#define WARN_ON_ONCE(condition) ({				\ -	int __ret_warn_on = !!(condition);			\ -	if (unlikely(__ret_warn_on))				\ -		__WARN_ONCE_TAINT(TAINT_WARN);			\ -	unlikely(__ret_warn_on);				\ -}) -#endif -  /*   * WARN(), WARN_ON(), WARN_ON_ONCE, and so on can be used to report   * significant kernel issues that need prompt attention if they should ever @@ -89,27 +78,27 @@ struct bug_entry {   *   * Use the versions with printk format strings to provide better diagnostics.   */ -#ifndef __WARN_TAINT -extern __printf(3, 4) -void warn_slowpath_fmt(const char *file, const int line, -		       const char *fmt, ...); +#ifndef __WARN_FLAGS  extern __printf(4, 5) -void warn_slowpath_fmt_taint(const char *file, const int line, unsigned taint, -			     const char *fmt, ...); -extern void warn_slowpath_null(const char *file, const int line); -#define WANT_WARN_ON_SLOWPATH -#define __WARN()		warn_slowpath_null(__FILE__, __LINE__) -#define __WARN_printf(arg...)	warn_slowpath_fmt(__FILE__, __LINE__, arg) -#define __WARN_printf_taint(taint, arg...)				\ -	warn_slowpath_fmt_taint(__FILE__, __LINE__, taint, arg) +void warn_slowpath_fmt(const char *file, const int line, unsigned taint, +		       const char *fmt, ...); +#define __WARN()		__WARN_printf(TAINT_WARN, NULL) +#define __WARN_printf(taint, arg...)					\ +	warn_slowpath_fmt(__FILE__, __LINE__, taint, arg)  #else  extern __printf(1, 2) void __warn_printk(const char *fmt, ...); -#define __WARN() do { \ -	printk(KERN_WARNING CUT_HERE); __WARN_TAINT(TAINT_WARN); \ -} while (0) -#define __WARN_printf(arg...)	__WARN_printf_taint(TAINT_WARN, arg) -#define __WARN_printf_taint(taint, arg...)				\ -	do { __warn_printk(arg); __WARN_TAINT(taint); } while (0) +#define __WARN()		__WARN_FLAGS(BUGFLAG_TAINT(TAINT_WARN)) +#define __WARN_printf(taint, arg...) do {				\ +		__warn_printk(arg);					\ +		__WARN_FLAGS(BUGFLAG_NO_CUT_HERE | BUGFLAG_TAINT(taint));\ +	} while (0) +#define WARN_ON_ONCE(condition) ({				\ +	int __ret_warn_on = !!(condition);			\ +	if (unlikely(__ret_warn_on))				\ +		__WARN_FLAGS(BUGFLAG_ONCE |			\ +			     BUGFLAG_TAINT(TAINT_WARN));	\ +	unlikely(__ret_warn_on);				\ +})  #endif  /* used internally by panic.c */ @@ -132,7 +121,7 @@ void __warn(const char *file, int line, void *caller, unsigned taint,  #define WARN(condition, format...) ({					\  	int __ret_warn_on = !!(condition);				\  	if (unlikely(__ret_warn_on))					\ -		__WARN_printf(format);					\ +		__WARN_printf(TAINT_WARN, format);			\  	unlikely(__ret_warn_on);					\  })  #endif @@ -140,7 +129,7 @@ void __warn(const char *file, int line, void *caller, unsigned taint,  #define WARN_TAINT(condition, taint, format...) ({			\  	int __ret_warn_on = !!(condition);				\  	if (unlikely(__ret_warn_on))					\ -		__WARN_printf_taint(taint, format);			\ +		__WARN_printf(taint, format);				\  	unlikely(__ret_warn_on);					\  }) @@ -185,7 +174,7 @@ void __warn(const char *file, int line, void *caller, unsigned taint,  #endif  #ifndef HAVE_ARCH_BUG_ON -#define BUG_ON(condition) do { if (condition) BUG(); } while (0) +#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)  #endif  #ifndef HAVE_ARCH_WARN_ON  |