bug.h 1.4 KB

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