| 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
|
| 19 |
|
| 20 | #define BUGFLAG_WARNING (1<<0)
|
| 21 | #endif
|
| 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("BUG: at %s:%d %s()\n", __FILE__, \
|
| 39 | __LINE__, __FUNCTION__); \
|
| 40 | dump_stack(); \
|
| 41 | } \
|
| 42 | unlikely(__ret_warn_on); \
|
| 43 | })
|
| 44 | #endif
|
| 45 |
|
| 46 | #else
|
| 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
|