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__
10struct 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