V4L/DVB: ir-core: dynamically load the compiled IR protocols
[safe/jmp/linux-2.6] / include / asm-generic / bug.h
index 8af2763..18c435d 100644 (file)
@@ -28,6 +28,17 @@ struct bug_entry {
 #define BUGFLAG_WARNING        (1<<0)
 #endif /* CONFIG_GENERIC_BUG */
 
+/*
+ * Don't use BUG() or BUG_ON() unless there's really no way out; one
+ * example might be detecting data structure corruption in the middle
+ * of an operation that can't be backed out of.  If the (sub)system
+ * can somehow continue operating, perhaps with reduced functionality,
+ * it's probably not BUG-worthy.
+ *
+ * If you're tempted to BUG(), think again:  is completely giving up
+ * really the *only* solution?  There are usually better options, where
+ * users don't need to reboot ASAP and can mostly shut down cleanly.
+ */
 #ifndef HAVE_ARCH_BUG
 #define BUG() do { \
        printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
@@ -39,14 +50,21 @@ struct bug_entry {
 #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0)
 #endif
 
+/*
+ * WARN(), WARN_ON(), WARN_ON_ONCE, and so on can be used to report
+ * significant issues that need prompt attention if they should ever
+ * appear at runtime.  Use the versions with printk format strings
+ * to provide better diagnostics.
+ */
 #ifndef __WARN
 #ifndef __ASSEMBLY__
-extern void warn_slowpath(const char *file, const int line,
+extern void warn_slowpath_fmt(const char *file, const int line,
                const char *fmt, ...) __attribute__((format(printf, 3, 4)));
+extern void warn_slowpath_null(const char *file, const int line);
 #define WANT_WARN_ON_SLOWPATH
 #endif
-#define __WARN()               warn_slowpath(__FILE__, __LINE__, NULL)
-#define __WARN_printf(arg...)  warn_slowpath(__FILE__, __LINE__, arg)
+#define __WARN()               warn_slowpath_null(__FILE__, __LINE__)
+#define __WARN_printf(arg...)  warn_slowpath_fmt(__FILE__, __LINE__, arg)
 #else
 #define __WARN_printf(arg...)  do { printk(arg); __WARN(); } while (0)
 #endif
@@ -71,7 +89,7 @@ extern void warn_slowpath(const char *file, const int line,
 
 #else /* !CONFIG_BUG */
 #ifndef HAVE_ARCH_BUG
-#define BUG()
+#define BUG() do {} while(0)
 #endif
 
 #ifndef HAVE_ARCH_BUG_ON
@@ -95,22 +113,22 @@ extern void warn_slowpath(const char *file, const int line,
 #endif
 
 #define WARN_ON_ONCE(condition)        ({                              \
-       static int __warned;                                    \
+       static bool __warned;                                   \
        int __ret_warn_once = !!(condition);                    \
                                                                \
        if (unlikely(__ret_warn_once))                          \
                if (WARN_ON(!__warned))                         \
-                       __warned = 1;                           \
+                       __warned = true;                        \
        unlikely(__ret_warn_once);                              \
 })
 
 #define WARN_ONCE(condition, format...)        ({                      \
-       static int __warned;                                    \
+       static bool __warned;                                   \
        int __ret_warn_once = !!(condition);                    \
                                                                \
        if (unlikely(__ret_warn_once))                          \
                if (WARN(!__warned, format))                    \
-                       __warned = 1;                           \
+                       __warned = true;                        \
        unlikely(__ret_warn_once);                              \
 })