spin_is_locked() is usually misued. In checkpatch.pl:
- warn when it is used at all
- error out when it is asserted on free, because that's usually broken
(e.g. doesn't work on on uni processor builds). Recommend
lockdep_assert_held() instead.
[joe@perches.com: some improvements]
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Cc: Andy Whitcroft <apw@canonical.com>
Cc: Joe Perches <joe@perches.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
}
}
+# spin_is_locked is usually misused. warn about it.
+ if ($line =~ /\bspin_is_locked\s*\(/) {
+ # BUG_ON/WARN_ON(!spin_is_locked() is generally a bug
+ if ($line =~ /(BUG_ON|WARN_ON|ASSERT)\s*\(!spin_is_locked/) {
+ ERROR("SPIN_IS_LOCKED",
+ "Use lockdep_assert_held() instead of asserts on !spin_is_locked\n"
+ . $herecurr);
+ } else {
+ WARN("SPIN_IS_LOCKED",
+ "spin_is_locked is usually misused. See Documentation/spinlocks.txt\n"
+ . $herecurr)
+ }
+ }
+
# check for lockdep_set_novalidate_class
if ($line =~ /^.\s*lockdep_set_novalidate_class\s*\(/ ||
$line =~ /__lockdep_no_validate__\s*\)/ ) {