ACPI: thinkpad-acpi: preserve radio state across shutdown
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / include / asm-generic / bug.h
blobedc6ba82e090961a841cd37b54cb6abc0311b4d7
1 #ifndef _ASM_GENERIC_BUG_H
2 #define _ASM_GENERIC_BUG_H
4 #include <linux/compiler.h>
6 #ifdef CONFIG_BUG
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;
18 #endif /* __ASSEMBLY__ */
20 #define BUGFLAG_WARNING (1<<0)
21 #endif /* CONFIG_GENERIC_BUG */
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
30 #ifndef HAVE_ARCH_BUG_ON
31 #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0)
32 #endif
34 #ifndef __WARN
35 #ifndef __ASSEMBLY__
36 extern void warn_on_slowpath(const char *file, const int line);
37 extern void warn_slowpath(const char *file, const int line,
38 const char *fmt, ...) __attribute__((format(printf, 3, 4)));
39 #define WANT_WARN_ON_SLOWPATH
40 #endif
41 #define __WARN() warn_on_slowpath(__FILE__, __LINE__)
42 #define __WARN_printf(arg...) warn_slowpath(__FILE__, __LINE__, arg)
43 #else
44 #define __WARN_printf(arg...) __WARN()
45 #endif
47 #ifndef WARN_ON
48 #define WARN_ON(condition) ({ \
49 int __ret_warn_on = !!(condition); \
50 if (unlikely(__ret_warn_on)) \
51 __WARN(); \
52 unlikely(__ret_warn_on); \
54 #endif
56 #ifndef WARN
57 #define WARN(condition, format...) ({ \
58 int __ret_warn_on = !!(condition); \
59 if (unlikely(__ret_warn_on)) \
60 __WARN_printf(format); \
61 unlikely(__ret_warn_on); \
63 #endif
65 #else /* !CONFIG_BUG */
66 #ifndef HAVE_ARCH_BUG
67 #define BUG()
68 #endif
70 #ifndef HAVE_ARCH_BUG_ON
71 #define BUG_ON(condition) do { if (condition) ; } while(0)
72 #endif
74 #ifndef HAVE_ARCH_WARN_ON
75 #define WARN_ON(condition) ({ \
76 int __ret_warn_on = !!(condition); \
77 unlikely(__ret_warn_on); \
79 #endif
81 #ifndef WARN
82 #define WARN(condition, format...) ({ \
83 int __ret_warn_on = !!(condition); \
84 unlikely(__ret_warn_on); \
86 #endif
88 #endif
90 #define WARN_ON_ONCE(condition) ({ \
91 static int __warned; \
92 int __ret_warn_once = !!(condition); \
94 if (unlikely(__ret_warn_once)) \
95 if (WARN_ON(!__warned)) \
96 __warned = 1; \
97 unlikely(__ret_warn_once); \
100 #define WARN_ONCE(condition, format...) ({ \
101 static int __warned; \
102 int __ret_warn_once = !!(condition); \
104 if (unlikely(__ret_warn_once)) \
105 if (WARN(!__warned, format)) \
106 __warned = 1; \
107 unlikely(__ret_warn_once); \
110 #define WARN_ON_RATELIMIT(condition, state) \
111 WARN_ON((condition) && __ratelimit(state))
113 #ifdef CONFIG_SMP
114 # define WARN_ON_SMP(x) WARN_ON(x)
115 #else
116 # define WARN_ON_SMP(x) do { } while (0)
117 #endif
119 #endif