All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Perches <joe@perches.com>
To: Logan Gunthorpe <logang@deltatee.com>,
	Julia Lawall <julia.lawall@lip6.fr>
Cc: linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org,
	Andy Whitcroft <apw@canonical.com>
Subject: Re: [PATCH v2] checkpatch: Add a warning for log messages that don't end in a new line
Date: Tue, 28 Nov 2017 00:15:21 +0000	[thread overview]
Message-ID: <1511828121.32426.83.camel@perches.com> (raw)
In-Reply-To: <993ca1c1-6d27-2ee1-94ed-41e8249755bd@deltatee.com>

On Mon, 2017-11-27 at 12:58 -0700, Logan Gunthorpe wrote:
> 
> On 27/11/17 11:57 AM, Joe Perches wrote:
> > It may or not be correct.
> 
> It's absolutely not correct in that it either requires that a subsequent 
> KERN_CONT/pr_cont or a '\n' at the end and it has neither.

The warning described is simply not correct.

> > Without inter-function call code flow analysis,
> > it's not possible to be correct.
> 
> But how many cases actually have the pr_cont/KERN_cont called in 
> different functions? This appears to be exceedingly rare to me.

Probably more than 50.

> > If you can get the false positive & false negative
> > rate higher, I'll listen.

> The only two classes of false positives that you've pointed out or that 
> I'm aware of:
> 
> 1) The case where call did not either end in a '\n' or have a 
> KERN_CONT/pr_cont in a subsequent call.

or a bare printk.

>  I've been arguing (to deaf ears) 

wrong here too.

> that a warning is appropriate here and this is not a false positive 
> because it absolutely is incorrect one way or the other.

The checkpatch message itself has to be correct.
Classifying the defect properly is a requirement.

> Coccinnelle 
> will also suffer from this issue because it can no better decide whether 
> the developer intended for the next call to be a continuation or for a 
> '\n' to end the line.

Well, coccinelle could do a better job than a
line parser like checkpatch.

Line parsing is what makes the type of defect difficult
for a stupid parser, and checkpatch is one of those, to
be correct enough with a low enough false positive rate
to be useful.

Please be aware I have already written just about exactly
what you are trying to do more than once and discarded
the work because the defect report rate was just too high.

> 2) Cases where the pr_cont/KERN_CONT is not in sufficient context for 
> the script to detect. These are impossible to fix (and it's likely also 
> impossible for Coccinelle to be 100% accurate here). However, I'd expect 
> these to be *very* rare and I'm only actually aware of one case where 
> this has actually happened (lib/locking-selftest.c:1189) and (mostly by 
> luck) my v2 patch does not flag this where Coccinelle did. Not to 
> mention that continuation usage is discouraged in new code so this 
> should be even rarer on the majority of what checkpatch is used for.
> 
> (also 3. would be the %pV case, but I've removed those in what could be 
> a v3 of the patch -- I'd also be happy to address other false positives 
> classes if I could find them)

> False negatives are much harder to quantify or improve. But given that I 
> detect nearly 6000 errors

No, you don't detect errors, you detect matches.

If you look at your results a bit harder, you'll find many
false positives.

> And yet, you have not pointed out any false positives that my patch 
> gives which Coccinelle does/would not. It really feels to me like your 
> biases are guiding your decision here and you aren't really looking at 
> the results.

I know the kernel source code style very well.
You simply haven't looked very hard at your results.

> Another thought I've had is that the dev_ functions don't have any form 
> of continuation.

Untrue

> So we could potentially limit checkpatch to looking for 
> those to avoid the issues with continuations. It's not high coverage but 
> at least a lot of the driver patches would be checked with no chance of 
> false positives. I think there would be value in doing that.

For instance:

drivers/mfd/ipaq-micro.c:		dev_err(micro->dev,
drivers/mfd/ipaq-micro.c-			"unknown msg %d [%d] ", id, len);
drivers/mfd/ipaq-micro.c-		for (i = 0; i < len; ++i)
drivers/mfd/ipaq-micro.c-			pr_cont("0x%02x ", data[i]);
drivers/mfd/ipaq-micro.c-		pr_cont("\n");

$ git grep -A5 -P -w "\bdev_(warn|alert|crit|err|info|notice)" | \
  grep -B5 -P -w "printk|pr_cont"

will find some, but not all of these types of uses.

$ grep -A5 -rP --include=*.[ch] '\bdev_(warn|alert|crit|err|info|notice).*\"[^"]+(?<!n)"' * | \
  grep -B5 -w -P "(printk|pr_cont)"

will find fewer false positives, but miss some
multiline dev_<level> calls too.



WARNING: multiple messages have this Message-ID (diff)
From: Joe Perches <joe@perches.com>
To: Logan Gunthorpe <logang@deltatee.com>,
	Julia Lawall <julia.lawall@lip6.fr>
Cc: linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org,
	Andy Whitcroft <apw@canonical.com>
Subject: Re: [PATCH v2] checkpatch: Add a warning for log messages that don't end in a new line
Date: Mon, 27 Nov 2017 16:15:21 -0800	[thread overview]
Message-ID: <1511828121.32426.83.camel@perches.com> (raw)
In-Reply-To: <993ca1c1-6d27-2ee1-94ed-41e8249755bd@deltatee.com>

On Mon, 2017-11-27 at 12:58 -0700, Logan Gunthorpe wrote:
> 
> On 27/11/17 11:57 AM, Joe Perches wrote:
> > It may or not be correct.
> 
> It's absolutely not correct in that it either requires that a subsequent 
> KERN_CONT/pr_cont or a '\n' at the end and it has neither.

The warning described is simply not correct.

> > Without inter-function call code flow analysis,
> > it's not possible to be correct.
> 
> But how many cases actually have the pr_cont/KERN_cont called in 
> different functions? This appears to be exceedingly rare to me.

Probably more than 50.

> > If you can get the false positive & false negative
> > rate higher, I'll listen.

> The only two classes of false positives that you've pointed out or that 
> I'm aware of:
> 
> 1) The case where call did not either end in a '\n' or have a 
> KERN_CONT/pr_cont in a subsequent call.

or a bare printk.

>  I've been arguing (to deaf ears) 

wrong here too.

> that a warning is appropriate here and this is not a false positive 
> because it absolutely is incorrect one way or the other.

The checkpatch message itself has to be correct.
Classifying the defect properly is a requirement.

> Coccinnelle 
> will also suffer from this issue because it can no better decide whether 
> the developer intended for the next call to be a continuation or for a 
> '\n' to end the line.

Well, coccinelle could do a better job than a
line parser like checkpatch.

Line parsing is what makes the type of defect difficult
for a stupid parser, and checkpatch is one of those, to
be correct enough with a low enough false positive rate
to be useful.

Please be aware I have already written just about exactly
what you are trying to do more than once and discarded
the work because the defect report rate was just too high.

> 2) Cases where the pr_cont/KERN_CONT is not in sufficient context for 
> the script to detect. These are impossible to fix (and it's likely also 
> impossible for Coccinelle to be 100% accurate here). However, I'd expect 
> these to be *very* rare and I'm only actually aware of one case where 
> this has actually happened (lib/locking-selftest.c:1189) and (mostly by 
> luck) my v2 patch does not flag this where Coccinelle did. Not to 
> mention that continuation usage is discouraged in new code so this 
> should be even rarer on the majority of what checkpatch is used for.
> 
> (also 3. would be the %pV case, but I've removed those in what could be 
> a v3 of the patch -- I'd also be happy to address other false positives 
> classes if I could find them)

> False negatives are much harder to quantify or improve. But given that I 
> detect nearly 6000 errors

No, you don't detect errors, you detect matches.

If you look at your results a bit harder, you'll find many
false positives.

> And yet, you have not pointed out any false positives that my patch 
> gives which Coccinelle does/would not. It really feels to me like your 
> biases are guiding your decision here and you aren't really looking at 
> the results.

I know the kernel source code style very well.
You simply haven't looked very hard at your results.

> Another thought I've had is that the dev_ functions don't have any form 
> of continuation.

Untrue

> So we could potentially limit checkpatch to looking for 
> those to avoid the issues with continuations. It's not high coverage but 
> at least a lot of the driver patches would be checked with no chance of 
> false positives. I think there would be value in doing that.

For instance:

drivers/mfd/ipaq-micro.c:		dev_err(micro->dev,
drivers/mfd/ipaq-micro.c-			"unknown msg %d [%d] ", id, len);
drivers/mfd/ipaq-micro.c-		for (i = 0; i < len; ++i)
drivers/mfd/ipaq-micro.c-			pr_cont("0x%02x ", data[i]);
drivers/mfd/ipaq-micro.c-		pr_cont("\n");

$ git grep -A5 -P -w "\bdev_(warn|alert|crit|err|info|notice)" | \
  grep -B5 -P -w "printk|pr_cont"

will find some, but not all of these types of uses.

$ grep -A5 -rP --include=*.[ch] '\bdev_(warn|alert|crit|err|info|notice).*\"[^"]+(?<!n)"' * | \
  grep -B5 -w -P "(printk|pr_cont)"

will find fewer false positives, but miss some
multiline dev_<level> calls too.

  parent reply	other threads:[~2017-11-28  0:15 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-26  5:40 [PATCH v2] checkpatch: Add a warning for log messages that don't end in a new line Logan Gunthorpe
2017-11-26  5:40 ` Logan Gunthorpe
2017-11-26  5:51 ` Julia Lawall
2017-11-26  5:51   ` Julia Lawall
2017-11-26  6:01   ` Joe Perches
2017-11-26  6:01     ` Joe Perches
2017-11-26 17:38     ` Logan Gunthorpe
2017-11-26 17:38       ` Logan Gunthorpe
2017-11-26 22:29       ` Joe Perches
2017-11-26 22:29         ` Joe Perches
     [not found]         ` <alpine.DEB.2.20.1711262334370.2111@hadrien>
2017-11-27  1:12           ` Joe Perches
2017-11-27  1:12             ` Joe Perches
2017-11-27  6:08             ` Julia Lawall
2017-11-27  6:08               ` Julia Lawall
2017-11-27  9:25               ` Joe Perches
2017-11-27  9:25                 ` Joe Perches
2017-11-27  9:32                 ` Julia Lawall
2017-11-27  9:32                   ` Julia Lawall
2017-11-27  9:42                   ` Joe Perches
2017-11-27  9:42                     ` Joe Perches
2017-11-27 17:07                 ` Logan Gunthorpe
2017-11-27 17:07                   ` Logan Gunthorpe
2017-11-27 17:26                   ` Joe Perches
2017-11-27 17:26                     ` Joe Perches
2017-11-27 17:33                     ` Logan Gunthorpe
2017-11-27 17:33                       ` Logan Gunthorpe
2017-11-27 17:41                       ` Joe Perches
2017-11-27 17:41                         ` Joe Perches
2017-11-27 17:42                         ` Logan Gunthorpe
2017-11-27 17:42                           ` Logan Gunthorpe
2017-11-27  4:00         ` Logan Gunthorpe
2017-11-27  4:00           ` Logan Gunthorpe
2017-11-27  6:11           ` Julia Lawall
2017-11-27  6:11             ` Julia Lawall
2017-11-27  6:27             ` Logan Gunthorpe
2017-11-27  6:27               ` Logan Gunthorpe
2017-11-27  6:34               ` Julia Lawall
2017-11-27  6:34                 ` Julia Lawall
2017-11-27  6:40                 ` Logan Gunthorpe
2017-11-27  6:40                   ` Logan Gunthorpe
2017-11-27  8:28                   ` Joe Perches
2017-11-27  8:28                     ` Joe Perches
2017-11-27  8:52                     ` Julia Lawall
2017-11-27  8:52                       ` Julia Lawall
2017-11-27  9:06                       ` Joe Perches
2017-11-27  9:06                         ` Joe Perches
2017-11-27 16:40                       ` Logan Gunthorpe
2017-11-27 16:40                         ` Logan Gunthorpe
2017-11-27 17:20                     ` Logan Gunthorpe
2017-11-27 17:20                       ` Logan Gunthorpe
2017-11-27 17:28                       ` Joe Perches
2017-11-27 17:28                         ` Joe Perches
2017-11-27 17:35                         ` Logan Gunthorpe
2017-11-27 17:35                           ` Logan Gunthorpe
2017-11-27 17:42                           ` Joe Perches
2017-11-27 17:42                             ` Joe Perches
2017-11-27 17:44                             ` Logan Gunthorpe
2017-11-27 17:44                               ` Logan Gunthorpe
2017-11-27 18:57                               ` Joe Perches
2017-11-27 18:57                                 ` Joe Perches
2017-11-27 19:58                                 ` Logan Gunthorpe
2017-11-27 19:58                                   ` Logan Gunthorpe
2017-11-27 20:49                                   ` Julia Lawall
2017-11-27 20:49                                     ` Julia Lawall
2017-11-27 22:56                                     ` Logan Gunthorpe
2017-11-27 22:56                                       ` Logan Gunthorpe
2017-11-28  0:15                                   ` Joe Perches [this message]
2017-11-28  0:15                                     ` Joe Perches
2017-11-26 16:55   ` Logan Gunthorpe
2017-11-26 16:55     ` Logan Gunthorpe
2017-11-26 17:09     ` Julia Lawall
2017-11-26 17:09       ` Julia Lawall
2017-11-26 17:47       ` Logan Gunthorpe
2017-11-26 17:47         ` Logan Gunthorpe
2017-11-26 18:17         ` Julia Lawall
2017-11-26 18:17           ` Julia Lawall
2017-11-26 18:33           ` Logan Gunthorpe
2017-11-26 18:33             ` Logan Gunthorpe
2017-11-27  1:35           ` Joe Perches
2017-11-27  1:35             ` Joe Perches
2017-11-27  6:40             ` Julia Lawall
2017-11-27  6:40               ` Julia Lawall
2017-11-27  6:42               ` Julia Lawall
2017-11-27  6:42                 ` Julia Lawall
2017-11-27  6:53                 ` Logan Gunthorpe
2017-11-27  6:53                   ` Logan Gunthorpe
2017-11-27  6:57                   ` Julia Lawall
2017-11-27  6:57                     ` Julia Lawall
2017-11-27  9:03                 ` Joe Perches
2017-11-27  9:03                   ` Joe Perches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1511828121.32426.83.camel@perches.com \
    --to=joe@perches.com \
    --cc=apw@canonical.com \
    --cc=julia.lawall@lip6.fr \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=logang@deltatee.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.