Re: [PATCH 1/3] coccinelle: mini_lock: improve performance when searching loops
From: Sang-Heon Jeon
Date: Mon Jul 27 2026 - 07:19:58 EST
On Mon, Jul 27, 2026 at 1:42 AM Julia Lawall <julia.lawall@xxxxxxxx> wrote:
>
>
>
> On Sat, 25 Jul 2026, Sang-Heon Jeon wrote:
>
> > The 'looped' rule collects the returns inside a for loop to
> > prevent 'err' from reporting them. It searches every for loop in
> > the file, and on files with large loop bodies the search explodes.
> >
> > For example, kernel/bpf/verifier.c runs for over 200 seconds,
> > almost entirely in 'looped' according to --profile. Since the
> > kernel .cocciconfig sets a 200 second timeout, coccicheck silently
> > skips the file.
> >
> > To avoid this, collect the candidate returns first, so that
> > 'looped' checks only those positions. 'err' then excludes what
> > 'looped' found.
> >
> > Every return that 'err' can report is also a candidate, so the
> > same returns are excluded as before and the output does not change.
> > A report-mode run over every .c file in the tree produces identical
> > output.
> >
> > So verifier.c now finishes well within the timeout, in a few
> > seconds.
> >
> > Signed-off-by: Sang-Heon Jeon <ekffu200098@xxxxxxxxx>
> > ---
> > scripts/coccinelle/locks/mini_lock.cocci | 24 ++++++++++++++++++++++--
> > 1 file changed, 22 insertions(+), 2 deletions(-)
> >
> > diff --git a/scripts/coccinelle/locks/mini_lock.cocci b/scripts/coccinelle/locks/mini_lock.cocci
> > index 71065d8a5d54..54e06cced63b 100644
> > --- a/scripts/coccinelle/locks/mini_lock.cocci
> > +++ b/scripts/coccinelle/locks/mini_lock.cocci
> > @@ -53,11 +53,31 @@ spin_lock_irq@p1
> > spin_lock_irqsave@p1
> > ) (E1@p,...);
> >
> > -@looped@
> > +@err_candidate exists@
> > +expression E1;
> > +position prelocked.p;
> > +position up != prelocked.p1;
> > +position rc;
> > +identifier lock,unlock;
> > +@@
> > +
> > +lock(E1@p,...);
> > +... when != E1
> > + when any
> > +if (...) {
> > + ... when != E1
> > + return@rc ...;
> > +}
> > +... when != E1
> > + when any
> > +unlock@up(E1,...);
> > +
> > +@looped depends on err_candidate@
> > +position err_candidate.rc;
>
> If the rule depends on a metavariable defined in err_candidate, then there
> is no need for depends on err_candidate.
>
> Also, I think this rule can be exists.
Thank you for the review. I'll address it in v2.
> julia
>
> > position r;
> > @@
> >
> > -for(...;...;...) { <+... return@r ...; ...+> }
> > +for(...;...;...) { <+... return@rc@r ...; ...+> }
> >
> > @err exists@
> > expression E1;
> > --
> > 2.43.0
> >
> >
Best Regards,
Sang-Heon Jeon