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