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__, __func__); \ 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 __WARN 35#ifndef __ASSEMBLY__ 36extern void warn_on_slowpath(const char *file, const int line); 37extern void warn_slowpath(const char *file, const int line, 38 const char *fmt, ...) __attribute__((format(printf, 3, 4))); 39#define WANT_WARN_ON_SLOWPATH 40#endif 41#define __WARN() warn_on_slowpath(__FILE__, __LINE__) 42#define __WARN_printf(arg...) warn_slowpath(__FILE__, __LINE__, arg) 43#else 44#define __WARN_printf(arg...) do { printk(arg); __WARN(); } while (0) 45#endif 46 47#ifndef WARN_ON 48#define WARN_ON(condition) ({ \ 49 int __ret_warn_on = !!(condition); \ 50 if (unlikely(__ret_warn_on)) \ 51 __WARN(); \ 52 unlikely(__ret_warn_on); \ 53}) 54#endif 55 56#ifndef WARN 57#define WARN(condition, format...) ({ \ 58 int __ret_warn_on = !!(condition); \ 59 if (unlikely(__ret_warn_on)) \ 60 __WARN_printf(format); \ 61 unlikely(__ret_warn_on); \ 62}) 63#endif 64 65#else /* !CONFIG_BUG */ 66#ifndef HAVE_ARCH_BUG 67#define BUG() 68#endif 69 70#ifndef HAVE_ARCH_BUG_ON 71#define BUG_ON(condition) do { if (condition) ; } while(0) 72#endif 73 74#ifndef HAVE_ARCH_WARN_ON 75#define WARN_ON(condition) ({ \ 76 int __ret_warn_on = !!(condition); \ 77 unlikely(__ret_warn_on); \ 78}) 79#endif 80 81#ifndef WARN 82#define WARN(condition, format...) ({ \ 83 int __ret_warn_on = !!(condition); \ 84 unlikely(__ret_warn_on); \ 85}) 86#endif 87 88#endif 89 90#define WARN_ON_ONCE(condition) ({ \ 91 static int __warned; \ 92 int __ret_warn_once = !!(condition); \ 93 \ 94 if (unlikely(__ret_warn_once)) \ 95 if (WARN_ON(!__warned)) \ 96 __warned = 1; \ 97 unlikely(__ret_warn_once); \ 98}) 99 100#define WARN_ONCE(condition, format...) ({ \ 101 static int __warned; \ 102 int __ret_warn_once = !!(condition); \ 103 \ 104 if (unlikely(__ret_warn_once)) \ 105 if (WARN(!__warned, format)) \ 106 __warned = 1; \ 107 unlikely(__ret_warn_once); \ 108}) 109 110#define WARN_ON_RATELIMIT(condition, state) \ 111 WARN_ON((condition) && __ratelimit(state)) 112 113#ifdef CONFIG_SMP 114# define WARN_ON_SMP(x) WARN_ON(x) 115#else 116# define WARN_ON_SMP(x) do { } while (0) 117#endif 118 119#endif