]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-generic/bug.h
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee13...
[linux-2.6-omap-h63xx.git] / include / asm-generic / bug.h
index 8ceab7bcd8b4f229f45536f8208e5394c99e9695..1d9573cf4a0bd043ce1cfb9e9190b35e3ea435b1 100644 (file)
 #endif
 
 #ifndef HAVE_ARCH_WARN_ON
-#define WARN_ON(condition) do { \
-       if (unlikely((condition)!=0)) { \
-               printk("BUG: warning at %s:%d/%s()\n", __FILE__, __LINE__, __FUNCTION__); \
-               dump_stack(); \
-       } \
-} while (0)
+#define WARN_ON(condition) ({                                          \
+       typeof(condition) __ret_warn_on = (condition);                  \
+       if (unlikely(__ret_warn_on)) {                                  \
+               printk("BUG: warning at %s:%d/%s()\n", __FILE__,        \
+                       __LINE__, __FUNCTION__);                        \
+               dump_stack();                                           \
+       }                                                               \
+       unlikely(__ret_warn_on);                                        \
+})
 #endif
 
 #else /* !CONFIG_BUG */
 #endif
 
 #ifndef HAVE_ARCH_WARN_ON
-#define WARN_ON(condition) do { if (condition) ; } while(0)
+#define WARN_ON(condition) unlikely((condition))
 #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(1);                             \
-               __ret = 1;                              \
-       }                                               \
-       __ret;                                          \
+#define WARN_ON_ONCE(condition)        ({                              \
+       static int __warned;                                    \
+       typeof(condition) __ret_warn_once = (condition);        \
+                                                               \
+       if (unlikely(__ret_warn_once))                          \
+               if (WARN_ON(!__warned))                         \
+                       __warned = 1;                           \
+       unlikely(__ret_warn_once);                              \
 })
 
 #ifdef CONFIG_SMP