2016-11-23 09:08:54

by Vaishali Thakkar

[permalink] [raw]
Subject: [PATCH v4 0/3] Coccinelle: misc: Improve the script for more accurate results

Few changes to improve the results given by the irqf_oneshot.cocci:

- Change in the matching rules to eliminate false postives in the
patch mode
- Change in the context mode to eliminate false postives in the
context mode
- Support for the missing devm_request_threaded_irq in context, report
and org mode

Changes since v3:
- Few more changes in the script to avoid some
possible false positives
- Moved initialization of all expressions in a single line
Changes since v2:
- Add missing initialization of metavariables
Changes since v1:
- Split patch in to the patchset

Vaishali Thakkar (3):
Coccinelle: misc: Improve the matching of rules
Coccinelle: misc: Improve the result given by context mode
Coccinelle: misc: Add support for devm variant in all modes

scripts/coccinelle/misc/irqf_oneshot.cocci | 52 +++++++++++++++++++++---------
1 file changed, 36 insertions(+), 16 deletions(-)

--
2.1.4


2016-11-23 09:06:40

by Vaishali Thakkar

[permalink] [raw]
Subject: [PATCH v4 3/3] Coccinelle: misc: Add support for devm variant in all modes

Add missing support for the devm_request_threaded_irq in
the rules of context, report and org modes.

Misc:
----
To be consistent with other scripts, change confidence level
of the script to 'Moderate'.

Signed-off-by: Vaishali Thakkar <[email protected]>
Acked-by: Julia Lawall <[email protected]>
---
Changes since v3:
- No changes in this patch
Changes since v2:
- Add missing initialization of metavariables
Changes since v1:
- Split patch in to the patchset
---
scripts/coccinelle/misc/irqf_oneshot.cocci | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/scripts/coccinelle/misc/irqf_oneshot.cocci b/scripts/coccinelle/misc/irqf_oneshot.cocci
index cec3672..58c2578 100644
--- a/scripts/coccinelle/misc/irqf_oneshot.cocci
+++ b/scripts/coccinelle/misc/irqf_oneshot.cocci
@@ -5,7 +5,7 @@
/// So pass the IRQF_ONESHOT flag in this case.
///
//
-// Confidence: Good
+// Confidence: Moderate
// Comments:
// Options: --no-includes

@@ -79,16 +79,25 @@ devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
)

@depends on context@
-expression irq;
+expression dev, irq;
position p != {r1.p,r2.p};
@@
+(
*request_threaded_irq@p(irq, NULL, ...)
+|
+*devm_request_threaded_irq@p(dev, irq, NULL, ...)
+)
+

@match depends on report || org@
-expression irq;
+expression dev, irq;
position p != {r1.p,r2.p};
@@
+(
request_threaded_irq@p(irq, NULL, ...)
+|
+devm_request_threaded_irq@p(dev, irq, NULL, ...)
+)

@script:python depends on org@
p << match.p;
--
2.1.4

2016-11-23 09:07:40

by Vaishali Thakkar

[permalink] [raw]
Subject: [PATCH v4 2/3] Coccinelle: misc: Improve the result given by context mode

To eliminate false positives given by the context mode, add
necessary arguments for the function request_threaded_irq.

Signed-off-by: Vaishali Thakkar <[email protected]>
Acked-by: Julia Lawall <[email protected]>
---
Changes since v3:
- No changes in this patch
Changes since v2:
- Add missing declaration of metavariable irq
Changes since v1:
- Split patch in to the patch set
---
scripts/coccinelle/misc/irqf_oneshot.cocci | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/scripts/coccinelle/misc/irqf_oneshot.cocci b/scripts/coccinelle/misc/irqf_oneshot.cocci
index bd3e140..cec3672 100644
--- a/scripts/coccinelle/misc/irqf_oneshot.cocci
+++ b/scripts/coccinelle/misc/irqf_oneshot.cocci
@@ -79,9 +79,10 @@ devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
)

@depends on context@
+expression irq;
position p != {r1.p,r2.p};
@@
-*request_threaded_irq@p(...)
+*request_threaded_irq@p(irq, NULL, ...)

@match depends on report || org@
expression irq;
--
2.1.4

2016-11-23 09:46:57

by Vaishali Thakkar

[permalink] [raw]
Subject: [PATCH v4 1/3] Coccinelle: misc: Improve the matching of rules

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 <[email protected]>
---
Changes since v3:
- Few more changes in the script to avoid some
possible false positives
- Moved initialization of all expressions in a single line
Changes since v2:
- No change in this patch
Changes since v1:
- Splitted patch in the patchset
---
scripts/coccinelle/misc/irqf_oneshot.cocci | 36 +++++++++++++++++++-----------
1 file changed, 23 insertions(+), 13 deletions(-)

diff --git a/scripts/coccinelle/misc/irqf_oneshot.cocci b/scripts/coccinelle/misc/irqf_oneshot.cocci
index b421150..bd3e140 100644
--- a/scripts/coccinelle/misc/irqf_oneshot.cocci
+++ b/scripts/coccinelle/misc/irqf_oneshot.cocci
@@ -15,16 +15,13 @@ virtual org
virtual report

@r1@
-expression dev;
-expression irq;
-expression thread_fn;
-expression flags;
+expression dev, irq, thread_fn;
position p;
@@
(
request_threaded_irq@p(irq, NULL, thread_fn,
(
-flags | IRQF_ONESHOT
+IRQF_ONESHOT | ...
|
IRQF_ONESHOT
)
@@ -32,21 +29,34 @@ IRQF_ONESHOT
|
devm_request_threaded_irq@p(dev, irq, NULL, thread_fn,
(
-flags | IRQF_ONESHOT
+IRQF_ONESHOT | ...
|
IRQF_ONESHOT
)
, ...)
)

-@depends on patch@
-expression dev;
-expression irq;
-expression thread_fn;
-expression flags;
+@r2@
+expression dev, irq, thread_fn, flags, e;
position p != r1.p;
@@
(
+flags = IRQF_ONESHOT | ...
+|
+flags |= IRQF_ONESHOT | ...
+)
+... when != flags = e
+(
+request_threaded_irq@p(irq, NULL, thread_fn, flags, ...);
+|
+devm_request_threaded_irq@p(dev, irq, NULL, thread_fn, flags, ...);
+)
+
+@depends on patch@
+expression dev, irq, thread_fn, flags;
+position p != {r1.p,r2.p};
+@@
+(
request_threaded_irq@p(irq, NULL, thread_fn,
(
-0
@@ -69,13 +79,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

2016-12-11 11:08:51

by Michal Marek

[permalink] [raw]
Subject: Re: [PATCH v4 0/3] Coccinelle: misc: Improve the script for more accurate results

On Wed, Nov 23, 2016 at 02:12:58PM +0530, Vaishali Thakkar wrote:
> Few changes to improve the results given by the irqf_oneshot.cocci:
>
> - Change in the matching rules to eliminate false postives in the
> patch mode
> - Change in the context mode to eliminate false postives in the
> context mode
> - Support for the missing devm_request_threaded_irq in context, report
> and org mode
>
> Changes since v3:
> - Few more changes in the script to avoid some
> possible false positives
> - Moved initialization of all expressions in a single line
> Changes since v2:
> - Add missing initialization of metavariables
> Changes since v1:
> - Split patch in to the patchset
>
> Vaishali Thakkar (3):
> Coccinelle: misc: Improve the matching of rules
> Coccinelle: misc: Improve the result given by context mode
> Coccinelle: misc: Add support for devm variant in all modes

Applied to kbuild.git#misc.

Michal