[PATCH RESEND v2] scripts/checkpatch.pl: remove _deferred and _deferred_once false warning

Maninder Singh posted 1 patch 4 years, 4 months ago
There is a newer version of this series
scripts/checkpatch.pl | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
[PATCH RESEND v2] scripts/checkpatch.pl: remove _deferred and _deferred_once false warning
Posted by Maninder Singh 4 years, 4 months ago
printk_deferred and printk_deferred_once requires LOGLEVEL in argument,
but checkpatch.pl reports it as warning:

WARNING: Possible unnecessary KERN_ALERT
printk_deferred(KERN_ALERT "checking deferred\n");

As suggested by Andy, made 2 functions from logFunction.

1. logFunction: with all checks
2. logFunctionCore: without printk(?:_ratelimited|_once|_deferred) checking

and call logFunctionCore instead of logFunction for checking of loglevel,
which will exclude checking of printk(?:_ratelimited|_once|_deferred).

This way, there is no need to maintain same stanza at  places for removing
printk flavours.

Co-developed-by: Vaneet Narang <v.narang@samsung.com>
Signed-off-by: Vaneet Narang <v.narang@samsung.com>
Signed-off-by: Maninder Singh <maninder1.s@samsung.com>
---
v1 -> v2: made 2 functions to remove _deferred and _deferred_once
	as suggested by Andy Whitcroft.

 scripts/checkpatch.pl | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index b01c36a15d9d..a6fa0c7360be 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -584,8 +584,7 @@ our $typeTypedefs = qr{(?x:
 
 our $zero_initializer = qr{(?:(?:0[xX])?0+$Int_type?|NULL|false)\b};
 
-our $logFunctions = qr{(?x:
-	printk(?:_ratelimited|_once|_deferred_once|_deferred|)|
+our $logFunctionsCore = qr{(?x:
 	(?:[a-z0-9]+_){1,2}(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
 	TP_printk|
 	WARN(?:_RATELIMIT|_ONCE|)|
@@ -594,6 +593,11 @@ our $logFunctions = qr{(?x:
 	seq_vprintf|seq_printf|seq_puts
 )};
 
+our $logFunctions = qr{(?x:
+	printk(?:_ratelimited|_once|_deferred_once|_deferred|)|
+	$logFunctionsCore
+)};
+
 our $allocFunctions = qr{(?x:
 	(?:(?:devm_)?
 		(?:kv|k|v)[czm]alloc(?:_array)?(?:_node)? |
@@ -6298,8 +6302,7 @@ sub process {
 		}
 
 # check for logging functions with KERN_<LEVEL>
-		if ($line !~ /printk(?:_ratelimited|_once)?\s*\(/ &&
-		    $line =~ /\b$logFunctions\s*\(.*\b(KERN_[A-Z]+)\b/) {
+		if ($line =~ /\b$logFunctionsCore\s*\(.*\b(KERN_[A-Z]+)\b/) {
 			my $level = $1;
 			if (WARN("UNNECESSARY_KERN_LEVEL",
 				 "Possible unnecessary $level\n" . $herecurr) &&
-- 
2.17.1

Re: [PATCH RESEND v2] scripts/checkpatch.pl: remove _deferred and _deferred_once false warning
Posted by Joe Perches 4 years, 4 months ago
On Wed, 2022-02-02 at 12:44 +0530, Maninder Singh wrote:
> printk_deferred and printk_deferred_once requires LOGLEVEL in argument,
> but checkpatch.pl reports it as warning:

When did that occur?  Please reference the specific commit.
When printk_sched (now printk_deferred) was created it did not
allow KERN_<LEVEL>.

see commit 3ccf3e830615 ("printk/sched: Introduce special printk_sched() for those awkward moments")

There are many existing printk_deferred uses without KERN_<LEVEL>.

> WARNING: Possible unnecessary KERN_ALERT
> printk_deferred(KERN_ALERT "checking deferred\n");


RE: [PATCH RESEND v2] scripts/checkpatch.pl: remove _deferred and _deferred_once false warning
Posted by Maninder Singh 4 years, 4 months ago
Hi,


>> printk_deferred and printk_deferred_once requires LOGLEVEL in argument,
>> but checkpatch.pl reports it as warning:
 
> When did that occur?  Please reference the specific commit.
> When printk_sched (now printk_deferred) was created it did not
> allow KERN_<LEVEL>.
 
> see commit 3ccf3e830615 ("printk/sched: Introduce special printk_sched() for those awkward moments")
 
I think with below commit:

98e35f5894cf208084688ec0c7bb7b713efc997f (printk: git rid of [sched_delayed] message for printk_deferred)

earlier it was passing hardcoded KERN_WARNING to all printk_deferred messages, but now it switched
to normal printk behavior.

-       if (in_sched)
-               text_len = scnprintf(text, sizeof(textbuf),
-                                    KERN_WARNING "[sched_delayed] ");
-
-       text_len += vscnprintf(text + text_len,
-                              sizeof(textbuf) - text_len, fmt, args);
+       text_len = vscnprintf(text, sizeof(textbuf), fmt, args);


I did not search that earlier, because we were fixing some issue in our local module code with printk_deferred
and then checkatch reported the issues, so thought of fixing it, becaue without level
pritk_deferred messages was shifted to default loglevel as done by normal printk.

So I thought it was designed to pass loglevel from starting stage and checjpatch reports falsely.
but seems checkpatch needs to fixed with that commit itself, because earlier it was not required to pass loglevel.


> There are many existing printk_deferred uses without KERN_<LEVEL>.

Either that needs to be fixed after that commit(98e35f5894cf) or their purpose is to
use KERN_DEFAULT log level i think.

Thanks,
Maninder Singh
 
 
Re: [PATCH RESEND v2] scripts/checkpatch.pl: remove _deferred and _deferred_once false warning
Posted by Joe Perches 4 years, 4 months ago
On Wed, 2022-02-02 at 15:22 +0530, Maninder Singh wrote:
> Hi,
> 
> 
> > >  printk_deferred and printk_deferred_once requires LOGLEVEL in argument,
> > >  but checkpatch.pl reports it as warning:
>  
> > When did that occur?  Please reference the specific commit.
> > When printk_sched (now printk_deferred) was created it did not
> > allow KERN_<LEVEL>.
>  
> > see commit 3ccf3e830615 ("printk/sched: Introduce special printk_sched() for those awkward moments")
>  
> I think with below commit:
> 
> 98e35f5894cf208084688ec0c7bb7b713efc997f (printk: git rid of [sched_delayed] message for printk_deferred)
> 
> earlier it was passing hardcoded KERN_WARNING to all printk_deferred messages, but now it switched
> to normal printk behavior.
> 
> -       if (in_sched)
> -               text_len = scnprintf(text, sizeof(textbuf),
> -                                    KERN_WARNING "[sched_delayed] ");
> -
> -       text_len += vscnprintf(text + text_len,
> -                              sizeof(textbuf) - text_len, fmt, args);
> +       text_len = vscnprintf(text, sizeof(textbuf), fmt, args);
> 
> 
> I did not search that earlier, because we were fixing some issue in our local module code with printk_deferred
> and then checkatch reported the issues, so thought of fixing it, becaue without level
> pritk_deferred messages was shifted to default loglevel as done by normal printk.
> 
> So I thought it was designed to pass loglevel from starting stage and checjpatch reports falsely.
> but seems checkpatch needs to fixed with that commit itself, because earlier it was not required to pass loglevel.

Most of that should be in the commit message.


RE: [PATCH RESEND v2] scripts/checkpatch.pl: remove _deferred and _deferred_once false warning
Posted by Maninder Singh 4 years, 4 months ago
Hi,

> > > >  printk_deferred and printk_deferred_once requires LOGLEVEL in argument,
> > > >  but checkpatch.pl reports it as warning:
> >  
> > > When did that occur?  Please reference the specific commit.
> > > When printk_sched (now printk_deferred) was created it did not
> > > allow KERN_<LEVEL>.
> >  
> > > see commit 3ccf3e830615 ("printk/sched: Introduce special printk_sched() for those awkward moments")
> >  
> > I think with below commit:
> > 
> > 98e35f5894cf208084688ec0c7bb7b713efc997f (printk: git rid of [sched_delayed] message for printk_deferred)
> > 
> > earlier it was passing hardcoded KERN_WARNING to all printk_deferred messages, but now it switched
> > to normal printk behavior.
> > 
> > -       if (in_sched)
> > -               text_len = scnprintf(text, sizeof(textbuf),
> > -                                    KERN_WARNING "[sched_delayed] ");
> > -
> > -       text_len += vscnprintf(text + text_len,
> > -                              sizeof(textbuf) - text_len, fmt, args);
> > +       text_len = vscnprintf(text, sizeof(textbuf), fmt, args);
> > 
> > 
> > I did not search that earlier, because we were fixing some issue in our local module code with printk_deferred
> > and then checkatch reported the issues, so thought of fixing it, becaue without level
> > pritk_deferred messages was shifted to default loglevel as done by normal printk.
> > 
> > So I thought it was designed to pass loglevel from starting stage and checjpatch reports falsely.
> > but seems checkpatch needs to fixed with that commit itself, because earlier it was not required to pass loglevel.
>  
> Most of that should be in the commit message.

Yes, Initially I thought it's added in checkpatch by mistake,
I Should have checked history of printk_deferred also.

I will send new version with updated comit message.

Thanks
   =================================================================================================================================
      Subject    : Re: [PATCH RESEND v2] scripts/checkpatch.pl: remove _deferred and _deferred_once false warning
      From       : null
      Sent Date  : 2022-02-02 15:29  GMT+5:30
   =================================================================================================================================
                  Name                Type          Job Title                       Dept.                               Company                
   =================================================================================================================================
      Maninder Singh                 TO         Staff Engineer             System S/W Group /SRI-Delhi               Samsung Electronics 
      apw@canonical.com              TO
      dwaipayanray1@gmail.com        TO
      lukas.bulwahn@gmail.com        TO
      linux-kernel@vger.kernel.org   CC
      Vaneet Narang                  CC         Associate Architect        System S/W Group /SRI-Delhi               Samsung Electronics
   =================================================================================================================================