xref: /OK3568_Linux_fs/kernel/tools/include/asm/bug.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef _TOOLS_ASM_BUG_H
3*4882a593Smuzhiyun #define _TOOLS_ASM_BUG_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <linux/compiler.h>
6*4882a593Smuzhiyun #include <stdio.h>
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #define __WARN_printf(arg...)	do { fprintf(stderr, arg); } while (0)
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #define WARN(condition, format...) ({		\
11*4882a593Smuzhiyun 	int __ret_warn_on = !!(condition);	\
12*4882a593Smuzhiyun 	if (unlikely(__ret_warn_on))		\
13*4882a593Smuzhiyun 		__WARN_printf(format);		\
14*4882a593Smuzhiyun 	unlikely(__ret_warn_on);		\
15*4882a593Smuzhiyun })
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #define WARN_ON(condition) ({					\
18*4882a593Smuzhiyun 	int __ret_warn_on = !!(condition);			\
19*4882a593Smuzhiyun 	if (unlikely(__ret_warn_on))				\
20*4882a593Smuzhiyun 		__WARN_printf("assertion failed at %s:%d\n",	\
21*4882a593Smuzhiyun 				__FILE__, __LINE__);		\
22*4882a593Smuzhiyun 	unlikely(__ret_warn_on);				\
23*4882a593Smuzhiyun })
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define WARN_ON_ONCE(condition) ({			\
26*4882a593Smuzhiyun 	static int __warned;				\
27*4882a593Smuzhiyun 	int __ret_warn_once = !!(condition);		\
28*4882a593Smuzhiyun 							\
29*4882a593Smuzhiyun 	if (unlikely(__ret_warn_once && !__warned)) {	\
30*4882a593Smuzhiyun 		__warned = true;			\
31*4882a593Smuzhiyun 		WARN_ON(1);				\
32*4882a593Smuzhiyun 	}						\
33*4882a593Smuzhiyun 	unlikely(__ret_warn_once);			\
34*4882a593Smuzhiyun })
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #define WARN_ONCE(condition, format...)	({	\
37*4882a593Smuzhiyun 	static int __warned;			\
38*4882a593Smuzhiyun 	int __ret_warn_once = !!(condition);	\
39*4882a593Smuzhiyun 						\
40*4882a593Smuzhiyun 	if (unlikely(__ret_warn_once))		\
41*4882a593Smuzhiyun 		if (WARN(!__warned, format)) 	\
42*4882a593Smuzhiyun 			__warned = 1;		\
43*4882a593Smuzhiyun 	unlikely(__ret_warn_once);		\
44*4882a593Smuzhiyun })
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #endif /* _TOOLS_ASM_BUG_H */
47