xref: /openbmc/linux/tools/include/asm/bug.h (revision b2441318)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
202dfc8d7SNamhyung Kim #ifndef _TOOLS_ASM_BUG_H
302dfc8d7SNamhyung Kim #define _TOOLS_ASM_BUG_H
402dfc8d7SNamhyung Kim 
5741a0c59SNamhyung Kim #include <linux/compiler.h>
6741a0c59SNamhyung Kim 
702dfc8d7SNamhyung Kim #define __WARN_printf(arg...)	do { fprintf(stderr, arg); } while (0)
802dfc8d7SNamhyung Kim 
902dfc8d7SNamhyung Kim #define WARN(condition, format...) ({		\
1002dfc8d7SNamhyung Kim 	int __ret_warn_on = !!(condition);	\
1102dfc8d7SNamhyung Kim 	if (unlikely(__ret_warn_on))		\
1202dfc8d7SNamhyung Kim 		__WARN_printf(format);		\
1302dfc8d7SNamhyung Kim 	unlikely(__ret_warn_on);		\
1402dfc8d7SNamhyung Kim })
1502dfc8d7SNamhyung Kim 
16b246a9d2SMatthew Wilcox #define WARN_ON(condition) ({					\
17b246a9d2SMatthew Wilcox 	int __ret_warn_on = !!(condition);			\
18b246a9d2SMatthew Wilcox 	if (unlikely(__ret_warn_on))				\
19b246a9d2SMatthew Wilcox 		__WARN_printf("assertion failed at %s:%d\n",	\
20b246a9d2SMatthew Wilcox 				__FILE__, __LINE__);		\
21b246a9d2SMatthew Wilcox 	unlikely(__ret_warn_on);				\
22b246a9d2SMatthew Wilcox })
23b246a9d2SMatthew Wilcox 
24ebb9a9aeSMatthew Wilcox #define WARN_ON_ONCE(condition) ({			\
25ebb9a9aeSMatthew Wilcox 	static int __warned;				\
26ebb9a9aeSMatthew Wilcox 	int __ret_warn_once = !!(condition);		\
27ebb9a9aeSMatthew Wilcox 							\
28ebb9a9aeSMatthew Wilcox 	if (unlikely(__ret_warn_once && !__warned)) {	\
29ebb9a9aeSMatthew Wilcox 		__warned = true;			\
30ebb9a9aeSMatthew Wilcox 		WARN_ON(1);				\
31ebb9a9aeSMatthew Wilcox 	}						\
32ebb9a9aeSMatthew Wilcox 	unlikely(__ret_warn_once);			\
33ebb9a9aeSMatthew Wilcox })
34ebb9a9aeSMatthew Wilcox 
3502dfc8d7SNamhyung Kim #define WARN_ONCE(condition, format...)	({	\
3602dfc8d7SNamhyung Kim 	static int __warned;			\
3702dfc8d7SNamhyung Kim 	int __ret_warn_once = !!(condition);	\
3802dfc8d7SNamhyung Kim 						\
3902dfc8d7SNamhyung Kim 	if (unlikely(__ret_warn_once))		\
4002dfc8d7SNamhyung Kim 		if (WARN(!__warned, format)) 	\
4102dfc8d7SNamhyung Kim 			__warned = 1;		\
4202dfc8d7SNamhyung Kim 	unlikely(__ret_warn_once);		\
4302dfc8d7SNamhyung Kim })
4402dfc8d7SNamhyung Kim 
4502dfc8d7SNamhyung Kim #endif /* _TOOLS_ASM_BUG_H */
46