bug.h 1.6 KB

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