aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/checkpatch.pl
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2012-08-21 05:27:00 -0400
committerIngo Molnar <mingo@kernel.org>2012-08-21 05:27:00 -0400
commitbcada3d4b8c96b8792c2306f363992ca5ab9da42 (patch)
treee420679a5db6ea4e1694eef57f9abb6acac8d4d3 /scripts/checkpatch.pl
parent26198c21d1b286a084fe5d514a30bc7e6c712a34 (diff)
parent000078bc3ee69efb1124b8478c7527389a826074 (diff)
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo: * Fix include order for bison/flex-generated C files, from Ben Hutchings * Build fixes and documentation corrections from David Ahern * Group parsing support, from Jiri Olsa * UI/gtk refactorings and improvements from Namhyung Kim * NULL deref fix for perf script, from Namhyung Kim * Assorted cleanups from Robert Richter * Let O= makes handle relative paths, from Steven Rostedt * perf script python fixes, from Feng Tang. * Improve 'perf lock' error message when the needed tracepoints are not present, from David Ahern. * Initial bash completion support, from Frederic Weisbecker * Allow building without libelf, from Namhyung Kim. * Support DWARF CFI based unwind to have callchains when %bp based unwinding is not possible, from Jiri Olsa. * Symbol resolution fixes, while fixing support PPC64 files with an .opt ELF section was the end goal, several fixes for code that handles all architectures and cleanups are included, from Cody Schafer. * Add a description for the JIT interface, from Andi Kleen. * Assorted fixes for Documentation and build in 32 bit, from Robert Richter * Add support for non-tracepoint events in perf script python, from Feng Tang * Cache the libtraceevent event_format associated to each evsel early, so that we avoid relookups, i.e. calling pevent_find_event repeatedly when processing tracepoint events. [ This is to reduce the surface contact with libtraceevents and make clear what is that the perf tools needs from that lib: so far parsing the common and per event fields. ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'scripts/checkpatch.pl')
-rwxr-xr-xscripts/checkpatch.pl71
1 files changed, 68 insertions, 3 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index e5bd60ff48e3..913d6bdfdda3 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1600,13 +1600,17 @@ sub process {
1600 1600
1601# Check signature styles 1601# Check signature styles
1602 if (!$in_header_lines && 1602 if (!$in_header_lines &&
1603 $line =~ /^(\s*)($signature_tags)(\s*)(.*)/) { 1603 $line =~ /^(\s*)([a-z0-9_-]+by:|$signature_tags)(\s*)(.*)/i) {
1604 my $space_before = $1; 1604 my $space_before = $1;
1605 my $sign_off = $2; 1605 my $sign_off = $2;
1606 my $space_after = $3; 1606 my $space_after = $3;
1607 my $email = $4; 1607 my $email = $4;
1608 my $ucfirst_sign_off = ucfirst(lc($sign_off)); 1608 my $ucfirst_sign_off = ucfirst(lc($sign_off));
1609 1609
1610 if ($sign_off !~ /$signature_tags/) {
1611 WARN("BAD_SIGN_OFF",
1612 "Non-standard signature: $sign_off\n" . $herecurr);
1613 }
1610 if (defined $space_before && $space_before ne "") { 1614 if (defined $space_before && $space_before ne "") {
1611 WARN("BAD_SIGN_OFF", 1615 WARN("BAD_SIGN_OFF",
1612 "Do not use whitespace before $ucfirst_sign_off\n" . $herecurr); 1616 "Do not use whitespace before $ucfirst_sign_off\n" . $herecurr);
@@ -1848,8 +1852,8 @@ sub process {
1848 1852
1849 my $pos = pos_last_openparen($rest); 1853 my $pos = pos_last_openparen($rest);
1850 if ($pos >= 0) { 1854 if ($pos >= 0) {
1851 $line =~ /^\+([ \t]*)/; 1855 $line =~ /^(\+| )([ \t]*)/;
1852 my $newindent = $1; 1856 my $newindent = $2;
1853 1857
1854 my $goodtabindent = $oldindent . 1858 my $goodtabindent = $oldindent .
1855 "\t" x ($pos / 8) . 1859 "\t" x ($pos / 8) .
@@ -2984,6 +2988,45 @@ sub process {
2984 } 2988 }
2985 } 2989 }
2986 2990
2991# do {} while (0) macro tests:
2992# single-statement macros do not need to be enclosed in do while (0) loop,
2993# macro should not end with a semicolon
2994 if ($^V && $^V ge 5.10.0 &&
2995 $realfile !~ m@/vmlinux.lds.h$@ &&
2996 $line =~ /^.\s*\#\s*define\s+$Ident(\()?/) {
2997 my $ln = $linenr;
2998 my $cnt = $realcnt;
2999 my ($off, $dstat, $dcond, $rest);
3000 my $ctx = '';
3001 ($dstat, $dcond, $ln, $cnt, $off) =
3002 ctx_statement_block($linenr, $realcnt, 0);
3003 $ctx = $dstat;
3004
3005 $dstat =~ s/\\\n.//g;
3006
3007 if ($dstat =~ /^\+\s*#\s*define\s+$Ident\s*${balanced_parens}\s*do\s*{(.*)\s*}\s*while\s*\(\s*0\s*\)\s*([;\s]*)\s*$/) {
3008 my $stmts = $2;
3009 my $semis = $3;
3010
3011 $ctx =~ s/\n*$//;
3012 my $cnt = statement_rawlines($ctx);
3013 my $herectx = $here . "\n";
3014
3015 for (my $n = 0; $n < $cnt; $n++) {
3016 $herectx .= raw_line($linenr, $n) . "\n";
3017 }
3018
3019 if (($stmts =~ tr/;/;/) == 1) {
3020 WARN("SINGLE_STATEMENT_DO_WHILE_MACRO",
3021 "Single statement macros should not use a do {} while (0) loop\n" . "$herectx");
3022 }
3023 if (defined $semis && $semis ne "") {
3024 WARN("DO_WHILE_MACRO_WITH_TRAILING_SEMICOLON",
3025 "do {} while (0) macros should not be semicolon terminated\n" . "$herectx");
3026 }
3027 }
3028 }
3029
2987# make sure symbols are always wrapped with VMLINUX_SYMBOL() ... 3030# make sure symbols are always wrapped with VMLINUX_SYMBOL() ...
2988# all assignments may have only one of the following with an assignment: 3031# all assignments may have only one of the following with an assignment:
2989# . 3032# .
@@ -3261,6 +3304,12 @@ sub process {
3261 "sizeof(& should be avoided\n" . $herecurr); 3304 "sizeof(& should be avoided\n" . $herecurr);
3262 } 3305 }
3263 3306
3307# check for sizeof without parenthesis
3308 if ($line =~ /\bsizeof\s+((?:\*\s*|)$Lval|$Type(?:\s+$Lval|))/) {
3309 WARN("SIZEOF_PARENTHESIS",
3310 "sizeof $1 should be sizeof($1)\n" . $herecurr);
3311 }
3312
3264# check for line continuations in quoted strings with odd counts of " 3313# check for line continuations in quoted strings with odd counts of "
3265 if ($rawline =~ /\\$/ && $rawline =~ tr/"/"/ % 2) { 3314 if ($rawline =~ /\\$/ && $rawline =~ tr/"/"/ % 2) {
3266 WARN("LINE_CONTINUATIONS", 3315 WARN("LINE_CONTINUATIONS",
@@ -3309,6 +3358,22 @@ sub process {
3309 } 3358 }
3310 } 3359 }
3311 3360
3361# check usleep_range arguments
3362 if ($^V && $^V ge 5.10.0 &&
3363 defined $stat &&
3364 $stat =~ /^\+(?:.*?)\busleep_range\s*\(\s*($FuncArg)\s*,\s*($FuncArg)\s*\)/) {
3365 my $min = $1;
3366 my $max = $7;
3367 if ($min eq $max) {
3368 WARN("USLEEP_RANGE",
3369 "usleep_range should not use min == max args; see Documentation/timers/timers-howto.txt\n" . "$here\n$stat\n");
3370 } elsif ($min =~ /^\d+$/ && $max =~ /^\d+$/ &&
3371 $min > $max) {
3372 WARN("USLEEP_RANGE",
3373 "usleep_range args reversed, use min then max; see Documentation/timers/timers-howto.txt\n" . "$here\n$stat\n");
3374 }
3375 }
3376
3312# check for new externs in .c files. 3377# check for new externs in .c files.
3313 if ($realfile =~ /\.c$/ && defined $stat && 3378 if ($realfile =~ /\.c$/ && defined $stat &&
3314 $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s) 3379 $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s)