xref: /openbmc/linux/include/asm-generic/bug.h (revision 64c70b1c)
1 #ifndef _ASM_GENERIC_BUG_H
2 #define _ASM_GENERIC_BUG_H
3 
4 #include <linux/compiler.h>
5 
6 #ifdef CONFIG_BUG
7 
8 #ifdef CONFIG_GENERIC_BUG
9 #ifndef __ASSEMBLY__
10 struct bug_entry {
11 	unsigned long	bug_addr;
12 #ifdef CONFIG_DEBUG_BUGVERBOSE
13 	const char	*file;
14 	unsigned short	line;
15 #endif
16 	unsigned short	flags;
17 };
18 #endif		/* __ASSEMBLY__ */
19 
20 #define BUGFLAG_WARNING	(1<<0)
21 #endif	/* CONFIG_GENERIC_BUG */
22 
23 #ifndef HAVE_ARCH_BUG
24 #define BUG() do { \
25 	printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __FUNCTION__); \
26 	panic("BUG!"); \
27 } while (0)
28 #endif
29 
30 #ifndef HAVE_ARCH_BUG_ON
31 #define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
32 #endif
33 
34 #ifndef HAVE_ARCH_WARN_ON
35 #define WARN_ON(condition) ({						\
36 	typeof(condition) __ret_warn_on = (condition);			\
37 	if (unlikely(__ret_warn_on)) {					\
38 		printk("WARNING: at %s:%d %s()\n", __FILE__,		\
39 			__LINE__, __FUNCTION__);			\
40 		dump_stack();						\
41 	}								\
42 	unlikely(__ret_warn_on);					\
43 })
44 #endif
45 
46 #else /* !CONFIG_BUG */
47 #ifndef HAVE_ARCH_BUG
48 #define BUG()
49 #endif
50 
51 #ifndef HAVE_ARCH_BUG_ON
52 #define BUG_ON(condition) do { if (condition) ; } while(0)
53 #endif
54 
55 #ifndef HAVE_ARCH_WARN_ON
56 #define WARN_ON(condition) ({						\
57 	typeof(condition) __ret_warn_on = (condition);			\
58 	unlikely(__ret_warn_on);					\
59 })
60 #endif
61 #endif
62 
63 #define WARN_ON_ONCE(condition)	({				\
64 	static int __warned;					\
65 	typeof(condition) __ret_warn_once = (condition);	\
66 								\
67 	if (unlikely(__ret_warn_once))				\
68 		if (WARN_ON(!__warned)) 			\
69 			__warned = 1;				\
70 	unlikely(__ret_warn_once);				\
71 })
72 
73 #ifdef CONFIG_SMP
74 # define WARN_ON_SMP(x)			WARN_ON(x)
75 #else
76 # define WARN_ON_SMP(x)			do { } while (0)
77 #endif
78 
79 #endif
80