linux/include/asm-generic/bug.h
<<
>>
Prefs
   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)) BUG(); } while(0)
  32#endif
  33
  34#ifndef HAVE_ARCH_WARN_ON
  35#define WARN_ON(condition) ({                                           \
  36        int __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        int __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        int __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