From 1c82fe39030a51872bee2de78bc65810d9d99b9a Mon Sep 17 00:00:00 2001 From: Gregory Bean Date: Mon, 2 May 2011 13:50:35 -0700 Subject: [PATCH] checkpatch: forbid implied-barrier I/O functions. Forbid read[bwl], write[bwl], in[bwl], and out[bwl], as they contain a 'stealth barrier' which can harm performance. Developers are expected to call appropriate __raw_* or *_relaxed APIs and manage barriers explicitly. Change-Id: Ie4da221c91a0505917199db9e2fdb704c3e47d44 Signed-off-by: Gregory Bean (cherry picked from commit 032fd4ba09e195d9913c08f460130da9905936ef) Signed-off-by: Stepan Moskovchenko --- scripts/checkpatch.pl | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 2c7afd884e95..9ff96e5df973 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -4515,6 +4515,26 @@ sub process { $herecurr); } +# read[bwl] & write[bwl] use too many barriers, use the _relaxed variants + if ($line =~ /\b((?:read|write)[bwl])\b/) { + ERROR("NON_RELAXED_IO", + "Use of $1 is deprecated: use $1_relaxed\n\t" . + "with appropriate memory barriers instead.\n" . + $herecurr); + } + +# likewise, in/out[bwl] should be __raw_read/write[bwl]... + if ($line =~ /\b((in|out)([bwl]))\b/) { + my ($all, $pref, $suf) = ($1, $2, $3); + $pref =~ s/in/read/; + $pref =~ s/out/write/; + ERROR("NON_RELAXED_IO", + "Use of $all is deprecated: use " . + "__raw_$pref$suf\n\t" . + "with appropriate memory barriers instead.\n" . + $herecurr); + } + # warn about #if 0 if ($line =~ /^.\s*\#\s*if\s+0\b/) { WARN("IF_0",