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)) BUG(); } while(0) 32 #endif 33 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 46 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); \ 53 }) 54 #endif 55 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); \ 62 }) 63 #endif 64 65 #else /* !CONFIG_BUG */ 66 #ifndef HAVE_ARCH_BUG 67 #define BUG() 68 #endif 69 70 #ifndef HAVE_ARCH_BUG_ON 71 #define BUG_ON(condition) do { if (condition) ; } while(0) 72 #endif 73 74 #ifndef HAVE_ARCH_WARN_ON 75 #define WARN_ON(condition) ({ \ 76 int __ret_warn_on = !!(condition); \ 77 unlikely(__ret_warn_on); \ 78 }) 79 #endif 80 81 #ifndef WARN 82 #define WARN(condition, format...) ({ \ 83 int __ret_warn_on = !!(condition); \ 84 unlikely(__ret_warn_on); \ 85 }) 86 #endif 87 88 #endif 89 90 #define WARN_ON_ONCE(condition) ({ \ 91 static int __warned; \ 92 int __ret_warn_once = !!(condition); \ 93 \ 94 if (unlikely(__ret_warn_once)) \ 95 if (WARN_ON(!__warned)) \ 96 __warned = 1; \ 97 unlikely(__ret_warn_once); \ 98 }) 99 100 #define WARN_ON_RATELIMIT(condition, state) \ 101 WARN_ON((condition) && __ratelimit(state)) 102 103 #ifdef CONFIG_SMP 104 # define WARN_ON_SMP(x) WARN_ON(x) 105 #else 106 # define WARN_ON_SMP(x) do { } while (0) 107 #endif 108 109 #endif 110