Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / include / asm-generic / bug.h
index cce17f9..cc45364 100644 (file)
@@ -2,7 +2,6 @@
 #define _ASM_GENERIC_BUG_H
 
 #include <linux/compiler.h>
-#include <linux/config.h>
 
 #ifndef __ASSEMBLY__
 extern const char *print_tainted(void);
@@ -35,12 +34,42 @@ extern const char *print_tainted(void);
 #endif
 
 #ifndef HAVE_ARCH_BUG_ON
-#define BUG_ON(condition) do { if (condition) ; } while(0)
+#define BUG_ON(condition) do { \
+       if (unlikely((condition)!=0)) { \
+               printk("BUGging on (%s)\n", #condition); \
+               BUG(); \
+       } \
+} while(0)
 #endif
 
 #ifndef HAVE_ARCH_WARN_ON
-#define WARN_ON(condition) do { if (condition) ; } while(0)
+#define WARN_ON(condition) do { \
+       if (unlikely((condition)!=0)) { \
+               printk("BUG: warning: (%s) at %s:%d/%s()\n", \
+                       #condition, __FILE__, __LINE__, __FUNCTION__); \
+               dump_stack(); \
+       } \
+} while (0)
+#endif
 #endif
+
+#define WARN_ON_ONCE(condition)                                \
+({                                                     \
+       static int __warn_once = 1;                     \
+       int __ret = 0;                                  \
+                                                       \
+       if (unlikely((condition) && __warn_once)) {     \
+               __warn_once = 0;                        \
+               WARN_ON(condition);                             \
+               __ret = 1;                              \
+       }                                               \
+       __ret;                                          \
+})
+
+#ifdef CONFIG_SMP
+# define WARN_ON_SMP(x)                        WARN_ON(x)
+#else
+# define WARN_ON_SMP(x)                        do { } while (0)
 #endif
 
 #endif