Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1520320 > unrolled thread
| Started by | Julia Lawall <julia.lawall@lip6.fr> |
|---|---|
| First post | 2016-11-12 19:10 +0100 |
| Last post | 2016-11-18 12:30 +0100 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [PATCH v3 1/3] Coccinelle: misc: Improve the matching of rules Julia Lawall <julia.lawall@lip6.fr> - 2016-11-12 19:10 +0100
Re: [PATCH v3 1/3] Coccinelle: misc: Improve the matching of rules Vaishali Thakkar <vaishali.thakkar@oracle.com> - 2016-11-18 12:30 +0100
| From | Julia Lawall <julia.lawall@lip6.fr> |
|---|---|
| Date | 2016-11-12 19:10 +0100 |
| Subject | Re: [PATCH v3 1/3] Coccinelle: misc: Improve the matching of rules |
| Message-ID | <sCKUy-5C9-41@gated-at.bofh.it> |
On Mon, 24 Oct 2016, Vaishali Thakkar wrote:
> Currently because of the left associativity of the operators, pattern
> IRQF_ONESHOT | flags does not match with the pattern when we have more
> than one flag after the disjunction. This eventually results in giving
> false positives by the script. This patch eliminates these FPs by
> improving the rule.
>
> Signed-off-by: Vaishali Thakkar <vaishali.thakkar@oracle.com>
> ---
> Changes since v2:
> - No change in this patch
> Changes since v1:
> - Splitted patch in the patchset
> ---
> scripts/coccinelle/misc/irqf_oneshot.cocci | 30 ++++++++++++++++++++++++------
> 1 file changed, 24 insertions(+), 6 deletions(-)
>
> diff --git a/scripts/coccinelle/misc/irqf_oneshot.cocci b/scripts/coccinelle/misc/irqf_oneshot.cocci
> index b421150..a8537fb 100644
> --- a/scripts/coccinelle/misc/irqf_oneshot.cocci
> +++ b/scripts/coccinelle/misc/irqf_oneshot.cocci
> @@ -18,13 +18,12 @@ virtual report
> expression dev;
> expression irq;
> expression thread_fn;
> -expression flags;
> position p;
> @@
> (
> request_threaded_irq@p(irq, NULL, thread_fn,
> (
> -flags | IRQF_ONESHOT
> +IRQF_ONESHOT | ...
> |
> IRQF_ONESHOT
> )
> @@ -32,20 +31,39 @@ IRQF_ONESHOT
> |
> devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
> (
> -flags | IRQF_ONESHOT
> +IRQF_ONESHOT | ...
> |
> IRQF_ONESHOT
> )
> , ...)
> )
>
> -@depends on patch@
> +@r2@
> expression dev;
> expression irq;
> expression thread_fn;
> expression flags;
> +expression ret;
> position p != r1.p;
> @@
> +flags = IRQF_ONESHOT | ...;
> +(
> +ret = request_threaded_irq@p(irq, NULL, thread_fn, flags, ...);
> +|
> +ret = devm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...);
> +|
> +return request_threaded_irq@p(irq, NULL, thread_fn, flags, ...);
> +|
> +return devm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...);
> +)
This rule needs some improvement.
flags = IRQF_ONESHOT | ...;
should be replaced by:
(
flags = IRQF_ONESHOT | ...
|
flags |= IRQF_ONESHOT | ...
)
... when != flags = e
where e should be a new expression metavariable. This effects a number of
changes. 1) Dropping the ; after the assignment allows an isomorphism to
trigger that allows it to match a variable declaration as well, 2)
IRQF_ONESHOT can be added after the original initialization by a |=, 3)
there can be some instructions between the initialization of flags and the
use.
Afterwards, the big disjunction with the irq calls is too specific.
In particular, these calls can also occur in an if test. The disjunction
should be replaced by the following:
(
request_threaded_irq@p(irq, NULL, thread_fn, flags, ...)
|
devm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...)
)
julia
> +
> +@depends on patch@
> +expression dev;
> +expression irq;
> +expression thread_fn;
> +expression flags;
> +position p != {r1.p,r2.p};
> +@@
> (
> request_threaded_irq@p(irq, NULL, thread_fn,
> (
> @@ -69,13 +87,13 @@ devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
> )
>
> @depends on context@
> -position p != r1.p;
> +position p != {r1.p,r2.p};
> @@
> *request_threaded_irq@p(...)
>
> @match depends on report || org@
> expression irq;
> -position p != r1.p;
> +position p != {r1.p,r2.p};
> @@
> request_threaded_irq@p(irq, NULL, ...)
>
> --
> 2.1.4
>
>
[toc] | [next] | [standalone]
| From | Vaishali Thakkar <vaishali.thakkar@oracle.com> |
|---|---|
| Date | 2016-11-18 12:30 +0100 |
| Message-ID | <sEPwL-6s7-51@gated-at.bofh.it> |
| In reply to | #1520320 |
On Saturday 12 November 2016 11:36 PM, Julia Lawall wrote:
>
>
> On Mon, 24 Oct 2016, Vaishali Thakkar wrote:
>
>> Currently because of the left associativity of the operators, pattern
>> IRQF_ONESHOT | flags does not match with the pattern when we have more
>> than one flag after the disjunction. This eventually results in giving
>> false positives by the script. This patch eliminates these FPs by
>> improving the rule.
>>
>> Signed-off-by: Vaishali Thakkar <vaishali.thakkar@oracle.com>
>> ---
>> Changes since v2:
>> - No change in this patch
>> Changes since v1:
>> - Splitted patch in the patchset
>> ---
>> scripts/coccinelle/misc/irqf_oneshot.cocci | 30 ++++++++++++++++++++++++------
>> 1 file changed, 24 insertions(+), 6 deletions(-)
>>
>> diff --git a/scripts/coccinelle/misc/irqf_oneshot.cocci b/scripts/coccinelle/misc/irqf_oneshot.cocci
>> index b421150..a8537fb 100644
>> --- a/scripts/coccinelle/misc/irqf_oneshot.cocci
>> +++ b/scripts/coccinelle/misc/irqf_oneshot.cocci
>> @@ -18,13 +18,12 @@ virtual report
>> expression dev;
>> expression irq;
>> expression thread_fn;
>> -expression flags;
>> position p;
>> @@
>> (
>> request_threaded_irq@p(irq, NULL, thread_fn,
>> (
>> -flags | IRQF_ONESHOT
>> +IRQF_ONESHOT | ...
>> |
>> IRQF_ONESHOT
>> )
>> @@ -32,20 +31,39 @@ IRQF_ONESHOT
>> |
>> devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
>> (
>> -flags | IRQF_ONESHOT
>> +IRQF_ONESHOT | ...
>> |
>> IRQF_ONESHOT
>> )
>> , ...)
>> )
>>
>> -@depends on patch@
>> +@r2@
>> expression dev;
>> expression irq;
>> expression thread_fn;
>> expression flags;
>> +expression ret;
>> position p != r1.p;
>> @@
>> +flags = IRQF_ONESHOT | ...;
>> +(
>> +ret = request_threaded_irq@p(irq, NULL, thread_fn, flags, ...);
>> +|
>> +ret = devm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...);
>> +|
>> +return request_threaded_irq@p(irq, NULL, thread_fn, flags, ...);
>> +|
>> +return devm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...);
>> +)
>
> This rule needs some improvement.
>
> flags = IRQF_ONESHOT | ...;
>
> should be replaced by:
>
> (
> flags = IRQF_ONESHOT | ...
> |
> flags |= IRQF_ONESHOT | ...
> )
> ... when != flags = e
>
> where e should be a new expression metavariable. This effects a number of
> changes. 1) Dropping the ; after the assignment allows an isomorphism to
> trigger that allows it to match a variable declaration as well, 2)
> IRQF_ONESHOT can be added after the original initialization by a |=, 3)
> there can be some instructions between the initialization of flags and the
> use.
Ok, this makes sense.
> Afterwards, the big disjunction with the irq calls is too specific.
> In particular, these calls can also occur in an if test. The disjunction
> should be replaced by the following:
>
> (
> request_threaded_irq@p(irq, NULL, thread_fn, flags, ...)
> |
> devm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...)
> )
Ok, primary motivation with having specified pattern was to have less
running time. But as discussed, it doesn't make much difference. So,
going with the more general way sounds good.
Thanks for the suggestions. I'll send the the revised version with these
changes.
> julia
>
>
>> +
>> +@depends on patch@
>> +expression dev;
>> +expression irq;
>> +expression thread_fn;
>> +expression flags;
>> +position p != {r1.p,r2.p};
>> +@@
>> (
>> request_threaded_irq@p(irq, NULL, thread_fn,
>> (
>> @@ -69,13 +87,13 @@ devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
>> )
>>
>> @depends on context@
>> -position p != r1.p;
>> +position p != {r1.p,r2.p};
>> @@
>> *request_threaded_irq@p(...)
>>
>> @match depends on report || org@
>> expression irq;
>> -position p != r1.p;
>> +position p != {r1.p,r2.p};
>> @@
>> request_threaded_irq@p(irq, NULL, ...)
>>
>> --
>> 2.1.4
>>
>>
--
Vaishali
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web