Thread (33 messages) read the whole thread 33 messages, 11 authors, 2022-07-11

Re: [PATCH 00/12] Clang -Wformat warning fixes

From: Joe Perches <joe@perches.com>
Date: 2022-06-10 12:44:43
Also in: alsa-devel, linux-acpi, linux-edac, linux-mm, lkml, llvm, netfilter-devel

On Fri, 2022-06-10 at 07:20 +0200, Greg Kroah-Hartman wrote:
On Thu, Jun 09, 2022 at 04:16:16PM -0700, Bill Wendling wrote:
quoted
On Thu, Jun 9, 2022 at 4:03 PM Jan Engelhardt [off-list ref] wrote:
quoted
On Friday 2022-06-10 00:49, Bill Wendling wrote:
quoted
On Thu, Jun 9, 2022 at 3:25 PM Andrew Morton [off-list ref] wrote:
quoted
On Thu,  9 Jun 2022 22:16:19 +0000 Bill Wendling [off-list ref] wrote:
quoted
This patch set fixes some clang warnings when -Wformat is enabled.
tldr:

-       printk(msg);
+       printk("%s", msg);

Otherwise these changes are a
useless consumer of runtime resources.
quoted
quoted
quoted
Calling a "printf" style function is already insanely expensive.
I expect the printk code itself dominates, not the % scan cost.
quoted
quoted
Perhaps you can split vprintk_store in the middle (after the call to
vsnprintf), and offer the second half as a function of its own (e.g.
"puts"). Then the tldr could be

- printk(msg);
+ puts(msg);
That might be a nice compromise. Andrew, what do you think?
You would need to do that for all of the dev_printk() variants, so I
doubt that would ever be all that useful as almost no one should be
using a "raw" printk() these days.
True.  The kernel has ~20K variants like that.

$ git grep -P '\b(?:(?:\w+_){1,3}(?:alert|emerg|crit|err|warn|notice|info|cont|debug|dbg)|printk)\s*\(".*"\s*\)\s*;' | wc -l
21160

That doesn't include the ~3K uses like

#define foo "bar"
	printk(foo);

$ git grep -P '\b(?:(?:\w+_){1,3}(?:alert|emerg|crit|err|warn|info|notice|debug|dbg|cont)|printk)\s*\((?:\s*\w+){1,3}\s*\)\s*;'|wc -l
2922

There are apparently only a few hundred uses of variants like:

	printk("%s", foo)

$ git grep -P '\b(?:(?:\w+_){1,3}(?:alert|emerg|crit|err|warn|info|notice|debug|dbg|cont)|printk)\s*\(\s*"%s(?:\\n)?"\s*,\s*(?:".*"|\w+)\s*\)\s*;' | wc -l
305

unless I screwed up my greps (which of course is quite possible)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help