HAOUAS Elyes has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/46118 )
Change subject: util/lint/checkpatch.pl: Reduce difference with latest linux version ......................................................................
util/lint/checkpatch.pl: Reduce difference with latest linux version
Change-Id: I5ecd134cd972b9010c607a6ea4cb87aa5b4932c6 Signed-off-by: Elyes HAOUAS ehaouas@noos.fr --- M util/lint/checkpatch.pl 1 file changed, 54 insertions(+), 48 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/18/46118/1
diff --git a/util/lint/checkpatch.pl b/util/lint/checkpatch.pl index 1affdb7..f1b98e0 100755 --- a/util/lint/checkpatch.pl +++ b/util/lint/checkpatch.pl @@ -13,6 +13,7 @@ use File::Basename; use Cwd 'abs_path'; use Term::ANSIColor qw(:constants); +use Encode qw(decode encode);
my $P = $0; my $D = dirname(abs_path($P)); @@ -51,7 +52,7 @@ my @exclude = (); #coreboot my $help = 0; my $configuration_file = ".checkpatch.conf"; -my $max_line_length = 80; +my $max_line_length = 100; my $ignore_perl_version = 0; my $minimum_perl_version = 5.10.0; my $min_conf_desc_length = 4; @@ -59,10 +60,10 @@ my $codespell = 0; my $codespellfile = "/usr/share/codespell/dictionary.txt"; my $conststructsfile = "$D/const_structs.checkpatch"; -my $typedefsfile = ""; +my $typedefsfile; my $color = "auto"; -my $allow_c99_comments = 1; - +my $allow_c99_comments = 1; # Can be overridden by --ignore C99_COMMENT_TOLERANCE +my $tabsize = 8; # For coreboot jenkins # If taint mode is enabled, Untaint the path - files must be in /bin, /usr/bin or /usr/local/bin if ( ${^TAINT} ) { @@ -104,6 +105,7 @@ --show-types show the specific message type in the output --max-line-length=n set the maximum line length, if exceeded, warn --min-conf-desc-length=n set the min description length, if shorter, warn + --tab-size=n set the number of spaces for tab (default $tabsize) --root=PATH PATH to the kernel tree root --no-summary suppress the per-file summary --mailback only produce a report in case of warnings/errors @@ -222,6 +224,7 @@ 'list-types!' => $list_types, 'max-line-length=i' => $max_line_length, 'min-conf-desc-length=i' => $min_conf_desc_length, + 'tab-size=i' => $tabsize, 'root=s' => $root, 'summary!' => $summary, 'mailback!' => $mailback, @@ -250,11 +253,11 @@
my $exit = 0;
+my $perl_version_ok = 1; if ($^V && $^V lt $minimum_perl_version) { + $perl_version_ok = 0; printf "$P: requires at least perl version %vd\n", $minimum_perl_version; - if (!$ignore_perl_version) { - exit(1); - } + exit(1) if (!$ignore_perl_version); }
#if no filenames are given, push '-' to read patch from stdin @@ -271,9 +274,12 @@ } elsif ($color =~ /^auto$/i) { $color = (-t STDOUT); } else { - die "Invalid color mode: $color\n"; + die "$P: Invalid color mode: $color\n"; }
+# skip TAB size 1 to avoid additional checks on $tabsize - 1 +die "$P: Invalid TAB size: $tabsize\n" if ($tabsize < 2); + sub hash_save_array_words { my ($hashRef, $arrayRef) = @_;
@@ -1040,11 +1046,11 @@ hash_show_words(%use_type, "Used"); hash_show_words(%ignore_type, "Ignored");
- if ($^V lt 5.10.0) { + if (!$perl_version_ok) { print << "EOM"
NOTE: perl $^V is not modern enough to detect all possible issues. - An upgrade to at least perl v5.10.0 is suggested. + An upgrade to at least perl $minimum_perl_version is suggested. EOM } if ($exit) { @@ -1178,7 +1184,7 @@ if ($c eq "\t") { $res .= ' '; $n++; - for (; ($n % 8) != 0; $n++) { + for (; ($n % $tabsize) != 0; $n++) { $res .= ' '; } next; @@ -2197,7 +2203,7 @@ sub tabify { my ($leading) = @_;
- my $source_indent = 8; + my $source_indent = $tabsize; my $max_spaces_before_tab = $source_indent - 1; my $spaces_to_tab = " " x $source_indent;
@@ -3072,7 +3078,7 @@ next if ($realfile !~ /.(h|c|pl|dtsi|dts)$/);
# at the beginning of a line any tabs must come first and anything -# more than 8 must use tabs. +# more than $tabsize must use tabs. if ($rawline =~ /^+\s* \t\s*\S/ || $rawline =~ /^+\s* \s*/) { my $herevet = "$here\n" . cat_vet($rawline) . "\n"; @@ -3091,7 +3097,7 @@ "please, no space before tabs\n" . $herevet) && $fix) { while ($fixed[$fixlinenr] =~ - s/(^+.*) {8,8}\t/$1\t\t/) {} + s/(^+.*) {$tabsize,$tabsize}\t/$1\t\t/) {} while ($fixed[$fixlinenr] =~ s/(^+.*) +\t/$1\t/) {} } @@ -3110,20 +3116,20 @@ }
# check indentation starts on a tab stop - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $sline =~ /^+\t+( +)(?:$c90_Keywords\b|{\s*$|}\s*(?:else\b|while\b|\s*$)|$Declare\s*$Ident\s*[;=])/) { my $indent = length($1); - if ($indent % 8) { + if ($indent % $tabsize) { if (WARN("TABSTOP", "Statements should start on a tabstop\n" . $herecurr) && $fix) { - $fixed[$fixlinenr] =~ s@(^+\t+) +@$1 . "\t" x ($indent/8)@e; + $fixed[$fixlinenr] =~ s@(^+\t+) +@$1 . "\t" x ($indent/$tabsize)@e; } } }
# check multi-line statement indentation matches previous line - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $prevline =~ /^+([ \t]*)((?:$c90_Keywords(?:\s+if)\s*)|(?:$Declare\s*)?(?:$Ident|(\s**\s*$Ident\s*))\s*|(?:*\s*)*$Lval\s*=\s*$Ident\s*)(.*(&&||||,)\s*$/) { $prevline =~ /^+(\t*)(.*)$/; my $oldindent = $1; @@ -3135,8 +3141,8 @@ my $newindent = $2;
my $goodtabindent = $oldindent . - "\t" x ($pos / 8) . - " " x ($pos % 8); + "\t" x ($pos / $tabsize) . + " " x ($pos % $tabsize); my $goodspaceindent = $oldindent . " " x $pos;
if ($newindent ne $goodtabindent && @@ -3607,11 +3613,11 @@ #print "line<$line> prevline<$prevline> indent<$indent> sindent<$sindent> check<$check> continuation<$continuation> s<$s> cond_lines<$cond_lines> stat_real<$stat_real> stat<$stat>\n";
if ($check && $s ne '' && - (($sindent % 8) != 0 || + (($sindent % $tabsize) != 0 || ($sindent < $indent) || ($sindent == $indent && ($s !~ /^\s*(?:}|{|else\b)/)) || - ($sindent > $indent + 8))) { + ($sindent > $indent + $tabsize))) { WARN("SUSPECT_CODE_INDENT", "suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n"); } @@ -3998,7 +4004,7 @@
# function brace can't be on same line, except for #defines of do while, # or if closed on same line - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $sline =~ /$Type\s*$Ident\s*$balanced_parens\s*{/ && $sline !~ /#\s*define\b.*do\s*{/ && $sline !~ /}/) { @@ -4611,7 +4617,7 @@ # check for unnecessary parentheses around comparisons in if uses # when !drivers/staging or command-line uses --strict if (($realfile !~ m@^(?:drivers/staging/)@ || $check_orig) && - $^V && $^V ge 5.10.0 && defined($stat) && + $perl_version_ok && defined($stat) && $stat =~ /(^.\s*if\s*($balanced_parens))/) { my $if_stat = $1; my $test = substr($2, 1, -1); @@ -4648,7 +4654,7 @@ # return is not a function if (defined($stat) && $stat =~ /^.\s*return(\s*)(/s) { my $spacing = $1; - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $stat =~ /^.\s*return\s*($balanced_parens)\s*;\s*$/) { my $value = $1; $value = deparenthesize($value); @@ -4675,7 +4681,7 @@ }
# if statements using unnecessary parentheses - ie: if ((foo == bar)) - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $line =~ /\bif\s*((?:(\s*){2,})/) { my $openparens = $1; my $count = $openparens =~ tr@(@(@; @@ -4692,7 +4698,7 @@ # avoid cases like "foo + BAR < baz" # only fix matches surrounded by parentheses to avoid incorrect # conversions like "FOO < baz() + 5" being "misfixed" to "baz() > FOO + 5" - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $line =~ /^+(.*)\b($Constant|[A-Z_][A-Z0-9_]*)\s*($Compare)\s*($LvalOrFunc)/) { my $lead = $1; my $const = $2; @@ -5117,7 +5123,7 @@ # do {} while (0) macro tests: # single-statement macros do not need to be enclosed in do while (0) loop, # macro should not end with a semicolon - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $realfile !~ m@/vmlinux.lds.h$@ && $line =~ /^.\s*#\s*define\s+$Ident(()?/) { my $ln = $linenr; @@ -5480,7 +5486,7 @@ }
# check for mask then right shift without a parentheses - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $line =~ /$LvalOrFunc\s*&\s*($LvalOrFunc)\s*>>/ && $4 !~ /^&/) { # $LvalOrFunc may be &foo, ignore if so WARN("MASK_THEN_SHIFT", @@ -5488,7 +5494,7 @@ }
# check for pointer comparisons to NULL - if ($^V && $^V ge 5.10.0) { + if ($perl_version_ok) { while ($line =~ /\b$LvalOrFunc\s*(==|!=)\s*NULL\b/g) { my $val = $1; my $equal = "!"; @@ -5760,7 +5766,7 @@ }
# Check for __attribute__ weak, or __weak declarations (may have link issues) - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $line =~ /(?:$Declare|$DeclareMisordered)\s*$Ident\s*$balanced_parens\s*(?:$Attribute)?\s*;/ && ($line =~ /\b__attribute__\s*(\s*(.*\bweak\b/ || $line =~ /\b__weak\b/)) { @@ -5842,7 +5848,7 @@ }
# check for vsprintf extension %p<foo> misuses - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $stat =~ /^+(?![^{]*{\s*).*\b(\w+)\s*(.*$String\s*,/s && $1 !~ /^_*volatile_*$/) { @@ -5889,7 +5895,7 @@ }
# Check for misused memsets - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $stat =~ /^+(?:.*?)\bmemset\s*(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*$FuncArg\s*)/) {
@@ -5907,7 +5913,7 @@ }
# Check for memcpy(foo, bar, ETH_ALEN) that could be ether_addr_copy(foo, bar) -# if ($^V && $^V ge 5.10.0 && +# if ($perl_version_ok && # defined $stat && # $stat =~ /^+(?:.*?)\bmemcpy\s*(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*)/) { # if (WARN("PREFER_ETHER_ADDR_COPY", @@ -5918,7 +5924,7 @@ # }
# Check for memcmp(foo, bar, ETH_ALEN) that could be ether_addr_equal*(foo, bar) -# if ($^V && $^V ge 5.10.0 && +# if ($perl_version_ok && # defined $stat && # $stat =~ /^+(?:.*?)\bmemcmp\s*(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*)/) { # WARN("PREFER_ETHER_ADDR_EQUAL", @@ -5927,7 +5933,7 @@
# check for memset(foo, 0x0, ETH_ALEN) that could be eth_zero_addr # check for memset(foo, 0xFF, ETH_ALEN) that could be eth_broadcast_addr -# if ($^V && $^V ge 5.10.0 && +# if ($perl_version_ok && # defined $stat && # $stat =~ /^+(?:.*?)\bmemset\s*(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*)/) { # @@ -5949,7 +5955,7 @@ # }
# typecasts on min/max could be min_t/max_t - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $stat =~ /^+(?:.*?)\b(min|max)\s*(\s*$FuncArg\s*,\s*$FuncArg\s*)/) { if (defined $2 || defined $7) { @@ -5973,7 +5979,7 @@ }
# check usleep_range arguments - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $stat =~ /^+(?:.*?)\busleep_range\s*(\s*($FuncArg)\s*,\s*($FuncArg)\s*)/) { my $min = $1; @@ -5989,7 +5995,7 @@ }
# check for naked sscanf - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $line =~ /\bsscanf\b/ && ($stat !~ /$Ident\s*=\s*sscanf\s*$balanced_parens/ && @@ -6003,7 +6009,7 @@ }
# check for simple sscanf that should be kstrto<foo> - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $line =~ /\bsscanf\b/) { my $lc = $stat =~ tr@\n@@; @@ -6075,7 +6081,7 @@ }
# check for function definitions - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $stat =~ /^.\s*(?:$Storage\s+)?$Type\s*($Ident)\s*$balanced_parens\s*{/s) { $context_function = $1; @@ -6115,14 +6121,14 @@
# alloc style # p = alloc(sizeof(struct foo), ...) should be p = alloc(sizeof(*p), ...) - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $line =~ /\b($Lval)\s*=\s*(?:$balanced_parens)?\s*([kv][mz]alloc(?:_node)?)\s*(\s*(sizeof\s*(\s*struct\s+$Lval\s*))/) { CHK("ALLOC_SIZEOF_STRUCT", "Prefer $3(sizeof(*$1)...) over $3($4...)\n" . $herecurr); }
# check for k[mz]alloc with multiplies that could be kmalloc_array/kcalloc - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $stat =~ /^+\s*($Lval)\s*=\s*(?:$balanced_parens)?\s*(k[mz]alloc)\s*(\s*($FuncArg)\s**\s*($FuncArg)\s*,/) { my $oldfunc = $3; @@ -6151,7 +6157,7 @@ }
# check for krealloc arg reuse - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $line =~ /\b($Lval)\s*=\s*(?:$balanced_parens)?\s*krealloc\s*(\s*\1\s*,/) { WARN("KREALLOC_ARG_REUSE", "Reusing the krealloc arg is almost always a bug\n" . $herecurr); @@ -6210,7 +6216,7 @@ }
# check for switch/default statements without a break; - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $stat =~ /^+[$;\s]*(?:case[$;\s]+\w+[$;\s]*:[$;\s]*|)*[$;\s]*\bdefault[$;\s]*:[$;\s]*;/g) { my $cnt = statement_rawlines($stat); @@ -6320,7 +6326,7 @@ }
# likely/unlikely comparisons similar to "(likely(foo) > 0)" - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && $line =~ /\b((?:un)?likely)\s*(\s*$FuncArg\s*)\s*$Compare/) { WARN("LIKELY_MISUSE", "Using $1 should generally have parentheses around the comparison\n" . $herecurr); @@ -6363,7 +6369,7 @@ # check for DEVICE_ATTR uses that could be DEVICE_ATTR_<FOO> # and whether or not function naming is typical and if # DEVICE_ATTR permissions uses are unusual too - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $stat =~ /\bDEVICE_ATTR\s*(\s*(\w+)\s*,\s*(?\s*(\s*(?:${multi_mode_perms_string_search}|0[0-7]{3,3})\s*)\s*)?\s*,\s*(\w+)\s*,\s*(\w+)\s*)/) { my $var = $1; @@ -6423,7 +6429,7 @@ # specific definition of not visible in sysfs. # o Ignore proc_create*(...) uses with a decimal 0 permission as that means # use the default permissions - if ($^V && $^V ge 5.10.0 && + if ($perl_version_ok && defined $stat && $line =~ /$mode_perms_search/) { foreach my $entry (@mode_permission_funcs) {