scripts/coccinelle/hid/ff_race.cocci | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
Replace "expression" with "identifier" in the declaration of hdev.
This is necessary because hdev is used as the name of a function
parameter.
Move the two uses of @p2 to the relevant function names.
Convert <... ...>, meaning that the contained pattern is optional,
to use ..., when any, and exists. This requires that the function
contain calls to hid_hw_start, etc, which reduces the set of files
that are considered for matching against this pattern.
Reported-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Julia Lawall <Julia.Lawall@inria.fr>
---
scripts/coccinelle/hid/ff_race.cocci | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/scripts/coccinelle/hid/ff_race.cocci b/scripts/coccinelle/hid/ff_race.cocci
index 479f5d1e3..e861de00c 100644
--- a/scripts/coccinelle/hid/ff_race.cocci
+++ b/scripts/coccinelle/hid/ff_race.cocci
@@ -7,18 +7,19 @@
virtual report
-@r@
+@r exists@
identifier probe_fn;
-expression hdev, flags;
+identifier hdev;
+expression flags;
position p1, p2;
@@
probe_fn(struct hid_device *hdev, ...) {
- <...
+ ... when any
hid_hw_start@p1(hdev, flags)
...
- \(input_ff_create\|input_ff_create_memless\)@p2(...)
- ...>
+ \(input_ff_create@p2\|input_ff_create_memless@p2\)(...)
+ ... when any
}
@script:python depends on report@
On Thu, 27 Aug 2026, Julia Lawall wrote: > Replace "expression" with "identifier" in the declaration of hdev. > This is necessary because hdev is used as the name of a function > parameter. > > Move the two uses of @p2 to the relevant function names. > > Convert <... ...>, meaning that the contained pattern is optional, > to use ..., when any, and exists. This requires that the function > contain calls to hid_hw_start, etc, which reduces the set of files > that are considered for matching against this pattern. > > Reported-by: Ricardo Ribalda <ribalda@chromium.org> > Signed-off-by: Julia Lawall <Julia.Lawall@inria.fr> Applied, thank you. -- Jiri Kosina SUSE Labs
> Replace "expression" with "identifier" in the declaration of hdev.
> This is necessary because hdev is used as the name of a function
> parameter.
…
> +++ b/scripts/coccinelle/hid/ff_race.cocci
…
> -@r@
> +@r exists@
> identifier probe_fn;
> -expression hdev, flags;
> +identifier hdev;
May the following SmPL code variant be applied?
identifier hdev, probe_fn;
> +expression flags;
> position p1, p2;
> @@
>
> probe_fn(struct hid_device *hdev, ...) {
> - <...
> + ... when any
> hid_hw_start@p1(hdev, flags)
> ...
> - \(input_ff_create\|input_ff_create_memless\)@p2(...)
> - ...>
> + \(input_ff_create@p2\|input_ff_create_memless@p2\)(...)
How do you think about to use the following SmPL code variation?
(input_ff_create@p2
|input_ff_create_memless@p2
)(...)
> + ... when any
> }
>
> @script:python depends on report@
Regards,
Markus
On Thu, 27 Aug 2026, Markus Elfring wrote:
> > Replace "expression" with "identifier" in the declaration of hdev.
> > This is necessary because hdev is used as the name of a function
> > parameter.
> …
> > +++ b/scripts/coccinelle/hid/ff_race.cocci
> …
> > -@r@
> > +@r exists@
> > identifier probe_fn;
> > -expression hdev, flags;
> > +identifier hdev;
>
> May the following SmPL code variant be applied?
>
> identifier hdev, probe_fn;
Yes, but it doesn't matter.
>
>
> > +expression flags;
> > position p1, p2;
> > @@
> >
> > probe_fn(struct hid_device *hdev, ...) {
> > - <...
> > + ... when any
> > hid_hw_start@p1(hdev, flags)
> > ...
> > - \(input_ff_create\|input_ff_create_memless\)@p2(...)
> > - ...>
> > + \(input_ff_create@p2\|input_ff_create_memless@p2\)(...)
>
> How do you think about to use the following SmPL code variation?
>
> (input_ff_create@p2
> |input_ff_create_memless@p2
> )(...)
I find this completely unreadable.
julia
>
>
> > + ... when any
> > }
> >
> > @script:python depends on report@
>
> Regards,
> Markus
>
>> …
>>> +++ b/scripts/coccinelle/hid/ff_race.cocci
>> …
>>> -@r@
>>> +@r exists@
>>> identifier probe_fn;
>>> -expression hdev, flags;
>>> +identifier hdev;
>>
>> May the following SmPL code variant be applied?
>>
>> identifier hdev, probe_fn;
>
> Yes, but it doesn't matter.
Can it occasionally matter to avoid the duplication of such an SmPL key word?
Can SmPL variable declarations become a bit shorter?
>>> +expression flags;
>>> position p1, p2;
>>> @@
>>>
>>> probe_fn(struct hid_device *hdev, ...) {
>>> - <...
>>> + ... when any
>>> hid_hw_start@p1(hdev, flags)
>>> ...
>>> - \(input_ff_create\|input_ff_create_memless\)@p2(...)
>>> - ...>
>>> + \(input_ff_create@p2\|input_ff_create_memless@p2\)(...)
>>
>> How do you think about to use the following SmPL code variation?
>>
>> (input_ff_create@p2
>> |input_ff_create_memless@p2
>> )(...)
>
> I find this completely unreadable.
I find this view surprising.
There are special views involved for the layout of such SmPL disjunctions.
Regards,
Markus
© 2016 - 2026 Red Hat, Inc.