|
@@ -165,10 +165,36 @@ extern void warn_slowpath_null(const char *file, const int line);
|
|
|
#define WARN_ON_RATELIMIT(condition, state) \
|
|
|
WARN_ON((condition) && __ratelimit(state))
|
|
|
|
|
|
+/*
|
|
|
+ * WARN_ON_SMP() is for cases that the warning is either
|
|
|
+ * meaningless for !SMP or may even cause failures.
|
|
|
+ * This is usually used for cases that we have
|
|
|
+ * WARN_ON(!spin_is_locked(&lock)) checks, as spin_is_locked()
|
|
|
+ * returns 0 for uniprocessor settings.
|
|
|
+ * It can also be used with values that are only defined
|
|
|
+ * on SMP:
|
|
|
+ *
|
|
|
+ * struct foo {
|
|
|
+ * [...]
|
|
|
+ * #ifdef CONFIG_SMP
|
|
|
+ * int bar;
|
|
|
+ * #endif
|
|
|
+ * };
|
|
|
+ *
|
|
|
+ * void func(struct foo *zoot)
|
|
|
+ * {
|
|
|
+ * WARN_ON_SMP(!zoot->bar);
|
|
|
+ *
|
|
|
+ * For CONFIG_SMP, WARN_ON_SMP() should act the same as WARN_ON(),
|
|
|
+ * and should be a nop and return false for uniprocessor.
|
|
|
+ *
|
|
|
+ * if (WARN_ON_SMP(x)) returns true only when CONFIG_SMP is set
|
|
|
+ * and x is true.
|
|
|
+ */
|
|
|
#ifdef CONFIG_SMP
|
|
|
# define WARN_ON_SMP(x) WARN_ON(x)
|
|
|
#else
|
|
|
-# define WARN_ON_SMP(x) do { } while (0)
|
|
|
+# define WARN_ON_SMP(x) ({0;})
|
|
|
#endif
|
|
|
|
|
|
#endif
|