1 #ifndef _ASM_GENERIC_BUG_H 2 #define _ASM_GENERIC_BUG_H 3 4 #include <linux/compiler.h> 5 6 #ifdef CONFIG_BUG 7 #ifndef HAVE_ARCH_BUG 8 #define BUG() do { \ 9 printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __FUNCTION__); \ 10 panic("BUG!"); \ 11 } while (0) 12 #endif 13 14 #ifndef HAVE_ARCH_BUG_ON 15 #define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0) 16 #endif 17 18 #ifndef HAVE_ARCH_WARN_ON 19 #define WARN_ON(condition) do { \ 20 if (unlikely((condition)!=0)) { \ 21 printk("BUG: warning at %s:%d/%s()\n", __FILE__, __LINE__, __FUNCTION__); \ 22 dump_stack(); \ 23 } \ 24 } while (0) 25 #endif 26 27 #else /* !CONFIG_BUG */ 28 #ifndef HAVE_ARCH_BUG 29 #define BUG() 30 #endif 31 32 #ifndef HAVE_ARCH_BUG_ON 33 #define BUG_ON(condition) do { if (condition) ; } while(0) 34 #endif 35 36 #ifndef HAVE_ARCH_WARN_ON 37 #define WARN_ON(condition) do { if (condition) ; } while(0) 38 #endif 39 #endif 40 41 #define WARN_ON_ONCE(condition) \ 42 ({ \ 43 static int __warn_once = 1; \ 44 int __ret = 0; \ 45 \ 46 if (unlikely((condition) && __warn_once)) { \ 47 __warn_once = 0; \ 48 WARN_ON(1); \ 49 __ret = 1; \ 50 } \ 51 __ret; \ 52 }) 53 54 #ifdef CONFIG_SMP 55 # define WARN_ON_SMP(x) WARN_ON(x) 56 #else 57 # define WARN_ON_SMP(x) do { } while (0) 58 #endif 59 60 #endif 61