This works rather better: Perhaps you could test? --- v2: o Avoid pr_cont o Use only last format line if split across multiple lines scripts/checkpatch.pl | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index d64c67..f00a6c8 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -5673,6 +5673,28 @@ sub process { } } +# check for possible missing newlines at the end of common logging functions + if (defined($stat) && + $stat =~ /^\+\s*($logFunctions)\s*\((?:\s*$FuncArg\s*,\s*){0,3}\s*$String/ && + $1 !~ /_cont$/ && $1 =~ /^(?:pr|dev|netdev|netif|wiphy)_/) { + my $cnt = statement_rawlines($stat); + my $extracted_string = ""; + for (my $i = 0; $i < $cnt; $i++) { + next if ($lines[$linenr + $i - 1] !~ /$String\s*[,\)]/); + $extracted_string = get_quoted_string($lines[$linenr + $i - 1], + $rawlines[$linenr + $i - 1]); + last if ($extracted_string ne ""); + } + if ($extracted_string ne "" && $extracted_string !~ /\\n"$/) { + my $herectx = $here . "\n"; + for (my $n = 0; $n < $cnt; $n++) { + $herectx .= raw_line($linenr, $n) . "\n"; + } + WARN("MISSING_FORMAT_NEWLINE", + "Possible missing '\\n' at the end of a logging message format string\n" . $herectx); + } + } + # check for logging functions with KERN_<LEVEL> if ($line !~ /printk(?:_ratelimited|_once)?\s*\(/ && $line =~ /\b$logFunctions\s*\(.*\b(KERN_[A-Z]+)\b/) {