xref: /rk3399_rockchip-uboot/include/linux/bug.h (revision 1a4f6af8bfd44c8ae6e87a81ff125eed47042cc5)
184b8bf6dSMasahiro Yamada #ifndef _LINUX_BUG_H
284b8bf6dSMasahiro Yamada #define _LINUX_BUG_H
384b8bf6dSMasahiro Yamada 
4046a6e2aSMasahiro Yamada #include <vsprintf.h> /* for panic() */
5d9b1ff81SMasahiro Yamada #include <linux/build_bug.h>
6046a6e2aSMasahiro Yamada #include <linux/compiler.h>
7046a6e2aSMasahiro Yamada #include <linux/printk.h>
8046a6e2aSMasahiro Yamada 
9046a6e2aSMasahiro Yamada #define BUG() do { \
10046a6e2aSMasahiro Yamada 	printk("BUG at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
11046a6e2aSMasahiro Yamada 	panic("BUG!"); \
12046a6e2aSMasahiro Yamada } while (0)
13046a6e2aSMasahiro Yamada 
14046a6e2aSMasahiro Yamada #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
15046a6e2aSMasahiro Yamada 
16046a6e2aSMasahiro Yamada #define WARN_ON(condition) ({						\
17046a6e2aSMasahiro Yamada 	int __ret_warn_on = !!(condition);				\
18046a6e2aSMasahiro Yamada 	if (unlikely(__ret_warn_on))					\
19046a6e2aSMasahiro Yamada 		printk("WARNING at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
20046a6e2aSMasahiro Yamada 	unlikely(__ret_warn_on);					\
21046a6e2aSMasahiro Yamada })
22046a6e2aSMasahiro Yamada 
23*f7f4c6d7SRamon Fried #define WARN(condition, format...) ({                   \
24*f7f4c6d7SRamon Fried 	int __ret_warn_on = !!(condition);              \
25*f7f4c6d7SRamon Fried 	if (unlikely(__ret_warn_on))                    \
26*f7f4c6d7SRamon Fried 		printf(format);                  \
27*f7f4c6d7SRamon Fried 	unlikely(__ret_warn_on);                    \
28*f7f4c6d7SRamon Fried })
29*f7f4c6d7SRamon Fried 
30046a6e2aSMasahiro Yamada #define WARN_ON_ONCE(condition)	({				\
31046a6e2aSMasahiro Yamada 	static bool __warned;					\
32046a6e2aSMasahiro Yamada 	int __ret_warn_once = !!(condition);			\
33046a6e2aSMasahiro Yamada 								\
34046a6e2aSMasahiro Yamada 	if (unlikely(__ret_warn_once && !__warned)) {		\
35046a6e2aSMasahiro Yamada 		__warned = true;				\
36046a6e2aSMasahiro Yamada 		WARN_ON(1);					\
37046a6e2aSMasahiro Yamada 	}							\
38046a6e2aSMasahiro Yamada 	unlikely(__ret_warn_once);				\
39046a6e2aSMasahiro Yamada })
4084b8bf6dSMasahiro Yamada 
41*f7f4c6d7SRamon Fried #define WARN_ONCE(condition, format...) ({          \
42*f7f4c6d7SRamon Fried 	static bool __warned;     \
43*f7f4c6d7SRamon Fried 	int __ret_warn_once = !!(condition);            \
44*f7f4c6d7SRamon Fried 								\
45*f7f4c6d7SRamon Fried 	if (unlikely(__ret_warn_once && !__warned)) {       \
46*f7f4c6d7SRamon Fried 		__warned = true;                \
47*f7f4c6d7SRamon Fried 		WARN(1, format);                \
48*f7f4c6d7SRamon Fried 	}                           \
49*f7f4c6d7SRamon Fried 	unlikely(__ret_warn_once);              \
50*f7f4c6d7SRamon Fried })
51*f7f4c6d7SRamon Fried 
5284b8bf6dSMasahiro Yamada #endif	/* _LINUX_BUG_H */
53