Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1723051 > unrolled thread

[PATCH v4] provide rule for finding refcounters

Started byElena Reshetova <elena.reshetova@intel.com>
First post2017-08-30 08:20 +0200
Last post2017-08-31 11:50 +0200
Articles 6 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v4] provide rule for finding refcounters Elena Reshetova <elena.reshetova@intel.com> - 2017-08-30 08:20 +0200
    [PATCH] Coccinelle: add atomic_as_refcounter script Elena Reshetova <elena.reshetova@intel.com> - 2017-08-30 08:20 +0200
      Re: [PATCH] Coccinelle: add atomic_as_refcounter script Julia Lawall <julia.lawall@lip6.fr> - 2017-08-30 14:30 +0200
        RE: [PATCH] Coccinelle: add atomic_as_refcounter script "Reshetova, Elena" <elena.reshetova@intel.com> - 2017-08-30 14:50 +0200
          RE: [PATCH] Coccinelle: add atomic_as_refcounter script Julia Lawall <julia.lawall@lip6.fr> - 2017-08-30 15:10 +0200
            RE: [PATCH] Coccinelle: add atomic_as_refcounter script "Reshetova, Elena" <elena.reshetova@intel.com> - 2017-08-31 11:50 +0200

#1723051 — [PATCH v4] provide rule for finding refcounters

FromElena Reshetova <elena.reshetova@intel.com>
Date2017-08-30 08:20 +0200
Subject[PATCH v4] provide rule for finding refcounters
Message-ID<uk4w1-4Jz-5@gated-at.bofh.it>
changes in v4:
Removed unnessesary "()" around expression in rule 4.

changes in v3:
Removed unnessesary rule 4 conditions pointed by Julia.

changes in v2:
Following the suggestion from Julia the first rule is split into
2. The output does not differ that much between these two versions,
but rule became more precise.


Elena Reshetova (1):
  Coccinelle: add atomic_as_refcounter script

 scripts/coccinelle/api/atomic_as_refcounter.cocci | 131 ++++++++++++++++++++++
 1 file changed, 131 insertions(+)
 create mode 100644 scripts/coccinelle/api/atomic_as_refcounter.cocci

-- 
2.7.4

[toc] | [next] | [standalone]


#1723056 — [PATCH] Coccinelle: add atomic_as_refcounter script

FromElena Reshetova <elena.reshetova@intel.com>
Date2017-08-30 08:20 +0200
Subject[PATCH] Coccinelle: add atomic_as_refcounter script
Message-ID<uk4w2-4Jz-19@gated-at.bofh.it>
In reply to#1723051
atomic_as_refcounter.cocci script allows detecting
cases when refcount_t type and API should be used
instead of atomic_t.

Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
---
 scripts/coccinelle/api/atomic_as_refcounter.cocci | 131 ++++++++++++++++++++++
 1 file changed, 131 insertions(+)
 create mode 100644 scripts/coccinelle/api/atomic_as_refcounter.cocci

diff --git a/scripts/coccinelle/api/atomic_as_refcounter.cocci b/scripts/coccinelle/api/atomic_as_refcounter.cocci
new file mode 100644
index 0000000..f83771b
--- /dev/null
+++ b/scripts/coccinelle/api/atomic_as_refcounter.cocci
@@ -0,0 +1,131 @@
+// Check if refcount_t type and API should be used
+// instead of atomic_t type when dealing with refcounters
+//
+// Copyright (c) 2016-2017, Elena Reshetova, Intel Corporation
+//
+// Confidence: Moderate
+// URL: http://coccinelle.lip6.fr/
+// Options: --include-headers --very-quiet
+
+virtual report
+
+@r1 exists@
+identifier a, x, y;
+position p1, p2;
+identifier fname =~ ".*free.*";
+identifier fname2 =~ ".*destroy.*";
+identifier fname3 =~ ".*del.*";
+identifier fname4 =~ ".*queue_work.*";
+identifier fname5 =~ ".*schedule_work.*";
+identifier fname6 =~ ".*call_rcu.*";
+
+@@
+
+(
+ atomic_dec_and_test@p1(&(a)->x)
+|
+ atomic_dec_and_lock@p1(&(a)->x, ...)
+|
+ atomic_long_dec_and_lock@p1(&(a)->x, ...)
+|
+ atomic_long_dec_and_test@p1(&(a)->x)
+|
+ atomic64_dec_and_test@p1(&(a)->x)
+|
+ local_dec_and_test@p1(&(a)->x)
+)
+...
+(
+ fname@p2(a, ...);
+|
+ fname2@p2(...);
+|
+ fname3@p2(...);
+|
+ fname4@p2(...);
+|
+ fname5@p2(...);
+|
+ fname6@p2(...);
+)
+
+
+@script:python depends on report@
+p1 << r1.p1;
+p2 << r1.p2;
+@@
+msg = "atomic_dec_and_test variation before object free at line %s."
+coccilib.report.print_report(p1[0], msg % (p2[0].line))
+
+@r4 exists@
+identifier a, x, y;
+position p1, p2;
+identifier fname =~ ".*free.*";
+
+@@
+
+(
+ atomic_dec_and_test@p1(&(a)->x)
+|
+ atomic_dec_and_lock@p1(&(a)->x, ...)
+|
+ atomic_long_dec_and_lock@p1(&(a)->x, ...)
+|
+ atomic_long_dec_and_test@p1(&(a)->x)
+|
+ atomic64_dec_and_test@p1(&(a)->x)
+|
+ local_dec_and_test@p1(&(a)->x)
+)
+...
+y=a
+...
+fname@p2(y, ...);
+
+
+@script:python depends on report@
+p1 << r4.p1;
+p2 << r4.p2;
+@@
+msg = "atomic_dec_and_test variation before object free at line %s."
+coccilib.report.print_report(p1[0], msg % (p2[0].line))
+
+@r2 exists@
+identifier a, x;
+position p1;
+@@
+
+(
+atomic_add_unless(&(a)->x,-1,1)@p1
+|
+atomic_long_add_unless(&(a)->x,-1,1)@p1
+|
+atomic64_add_unless(&(a)->x,-1,1)@p1
+)
+
+@script:python depends on report@
+p1 << r2.p1;
+@@
+msg = "atomic_add_unless"
+coccilib.report.print_report(p1[0], msg)
+
+@r3 exists@
+identifier x;
+position p1;
+@@
+
+(
+x = atomic_add_return@p1(-1, ...);
+|
+x = atomic_long_add_return@p1(-1, ...);
+|
+x = atomic64_add_return@p1(-1, ...);
+)
+
+@script:python depends on report@
+p1 << r3.p1;
+@@
+msg = "x = atomic_add_return(-1, ...)"
+coccilib.report.print_report(p1[0], msg)
+
+
-- 
2.7.4

[toc] | [prev] | [next] | [standalone]


#1723250 — Re: [PATCH] Coccinelle: add atomic_as_refcounter script

FromJulia Lawall <julia.lawall@lip6.fr>
Date2017-08-30 14:30 +0200
SubjectRe: [PATCH] Coccinelle: add atomic_as_refcounter script
Message-ID<ukai6-8hx-19@gated-at.bofh.it>
In reply to#1723056

On Wed, 30 Aug 2017, Elena Reshetova wrote:

> atomic_as_refcounter.cocci script allows detecting
> cases when refcount_t type and API should be used
> instead of atomic_t.
>
> Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>

Acked-by: Julia Lawall <julia.lawall@lip6.fr>

> ---
>  scripts/coccinelle/api/atomic_as_refcounter.cocci | 131 ++++++++++++++++++++++
>  1 file changed, 131 insertions(+)
>  create mode 100644 scripts/coccinelle/api/atomic_as_refcounter.cocci
>
> diff --git a/scripts/coccinelle/api/atomic_as_refcounter.cocci b/scripts/coccinelle/api/atomic_as_refcounter.cocci
> new file mode 100644
> index 0000000..f83771b
> --- /dev/null
> +++ b/scripts/coccinelle/api/atomic_as_refcounter.cocci
> @@ -0,0 +1,131 @@
> +// Check if refcount_t type and API should be used
> +// instead of atomic_t type when dealing with refcounters
> +//
> +// Copyright (c) 2016-2017, Elena Reshetova, Intel Corporation
> +//
> +// Confidence: Moderate
> +// URL: http://coccinelle.lip6.fr/
> +// Options: --include-headers --very-quiet
> +
> +virtual report
> +
> +@r1 exists@
> +identifier a, x, y;
> +position p1, p2;
> +identifier fname =~ ".*free.*";
> +identifier fname2 =~ ".*destroy.*";
> +identifier fname3 =~ ".*del.*";
> +identifier fname4 =~ ".*queue_work.*";
> +identifier fname5 =~ ".*schedule_work.*";
> +identifier fname6 =~ ".*call_rcu.*";
> +
> +@@
> +
> +(
> + atomic_dec_and_test@p1(&(a)->x)
> +|
> + atomic_dec_and_lock@p1(&(a)->x, ...)
> +|
> + atomic_long_dec_and_lock@p1(&(a)->x, ...)
> +|
> + atomic_long_dec_and_test@p1(&(a)->x)
> +|
> + atomic64_dec_and_test@p1(&(a)->x)
> +|
> + local_dec_and_test@p1(&(a)->x)
> +)
> +...
> +(
> + fname@p2(a, ...);
> +|
> + fname2@p2(...);
> +|
> + fname3@p2(...);
> +|
> + fname4@p2(...);
> +|
> + fname5@p2(...);
> +|
> + fname6@p2(...);
> +)
> +
> +
> +@script:python depends on report@
> +p1 << r1.p1;
> +p2 << r1.p2;
> +@@
> +msg = "atomic_dec_and_test variation before object free at line %s."
> +coccilib.report.print_report(p1[0], msg % (p2[0].line))
> +
> +@r4 exists@
> +identifier a, x, y;
> +position p1, p2;
> +identifier fname =~ ".*free.*";
> +
> +@@
> +
> +(
> + atomic_dec_and_test@p1(&(a)->x)
> +|
> + atomic_dec_and_lock@p1(&(a)->x, ...)
> +|
> + atomic_long_dec_and_lock@p1(&(a)->x, ...)
> +|
> + atomic_long_dec_and_test@p1(&(a)->x)
> +|
> + atomic64_dec_and_test@p1(&(a)->x)
> +|
> + local_dec_and_test@p1(&(a)->x)
> +)
> +...
> +y=a
> +...
> +fname@p2(y, ...);
> +
> +
> +@script:python depends on report@
> +p1 << r4.p1;
> +p2 << r4.p2;
> +@@
> +msg = "atomic_dec_and_test variation before object free at line %s."
> +coccilib.report.print_report(p1[0], msg % (p2[0].line))
> +
> +@r2 exists@
> +identifier a, x;
> +position p1;
> +@@
> +
> +(
> +atomic_add_unless(&(a)->x,-1,1)@p1
> +|
> +atomic_long_add_unless(&(a)->x,-1,1)@p1
> +|
> +atomic64_add_unless(&(a)->x,-1,1)@p1
> +)
> +
> +@script:python depends on report@
> +p1 << r2.p1;
> +@@
> +msg = "atomic_add_unless"
> +coccilib.report.print_report(p1[0], msg)
> +
> +@r3 exists@
> +identifier x;
> +position p1;
> +@@
> +
> +(
> +x = atomic_add_return@p1(-1, ...);
> +|
> +x = atomic_long_add_return@p1(-1, ...);
> +|
> +x = atomic64_add_return@p1(-1, ...);
> +)
> +
> +@script:python depends on report@
> +p1 << r3.p1;
> +@@
> +msg = "x = atomic_add_return(-1, ...)"
> +coccilib.report.print_report(p1[0], msg)
> +
> +
> --
> 2.7.4
>
>

[toc] | [prev] | [next] | [standalone]


#1723275 — RE: [PATCH] Coccinelle: add atomic_as_refcounter script

From"Reshetova, Elena" <elena.reshetova@intel.com>
Date2017-08-30 14:50 +0200
SubjectRE: [PATCH] Coccinelle: add atomic_as_refcounter script
Message-ID<ukaBs-8nI-17@gated-at.bofh.it>
In reply to#1723250
> 
> On Wed, 30 Aug 2017, Elena Reshetova wrote:
> 
> > atomic_as_refcounter.cocci script allows detecting
> > cases when refcount_t type and API should be used
> > instead of atomic_t.
> >
> > Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
> 
> Acked-by: Julia Lawall <julia.lawall@lip6.fr>

Thank you very much Julia! What is the correct path to merge this?
I will resend with your acked-by, but what is the tree that should merge it?

Best Regards,
Elena.
> 
> > ---
> >  scripts/coccinelle/api/atomic_as_refcounter.cocci | 131
> ++++++++++++++++++++++
> >  1 file changed, 131 insertions(+)
> >  create mode 100644 scripts/coccinelle/api/atomic_as_refcounter.cocci
> >
> > diff --git a/scripts/coccinelle/api/atomic_as_refcounter.cocci
> b/scripts/coccinelle/api/atomic_as_refcounter.cocci
> > new file mode 100644
> > index 0000000..f83771b
> > --- /dev/null
> > +++ b/scripts/coccinelle/api/atomic_as_refcounter.cocci
> > @@ -0,0 +1,131 @@
> > +// Check if refcount_t type and API should be used
> > +// instead of atomic_t type when dealing with refcounters
> > +//
> > +// Copyright (c) 2016-2017, Elena Reshetova, Intel Corporation
> > +//
> > +// Confidence: Moderate
> > +// URL: http://coccinelle.lip6.fr/
> > +// Options: --include-headers --very-quiet
> > +
> > +virtual report
> > +
> > +@r1 exists@
> > +identifier a, x, y;
> > +position p1, p2;
> > +identifier fname =~ ".*free.*";
> > +identifier fname2 =~ ".*destroy.*";
> > +identifier fname3 =~ ".*del.*";
> > +identifier fname4 =~ ".*queue_work.*";
> > +identifier fname5 =~ ".*schedule_work.*";
> > +identifier fname6 =~ ".*call_rcu.*";
> > +
> > +@@
> > +
> > +(
> > + atomic_dec_and_test@p1(&(a)->x)
> > +|
> > + atomic_dec_and_lock@p1(&(a)->x, ...)
> > +|
> > + atomic_long_dec_and_lock@p1(&(a)->x, ...)
> > +|
> > + atomic_long_dec_and_test@p1(&(a)->x)
> > +|
> > + atomic64_dec_and_test@p1(&(a)->x)
> > +|
> > + local_dec_and_test@p1(&(a)->x)
> > +)
> > +...
> > +(
> > + fname@p2(a, ...);
> > +|
> > + fname2@p2(...);
> > +|
> > + fname3@p2(...);
> > +|
> > + fname4@p2(...);
> > +|
> > + fname5@p2(...);
> > +|
> > + fname6@p2(...);
> > +)
> > +
> > +
> > +@script:python depends on report@
> > +p1 << r1.p1;
> > +p2 << r1.p2;
> > +@@
> > +msg = "atomic_dec_and_test variation before object free at line %s."
> > +coccilib.report.print_report(p1[0], msg % (p2[0].line))
> > +
> > +@r4 exists@
> > +identifier a, x, y;
> > +position p1, p2;
> > +identifier fname =~ ".*free.*";
> > +
> > +@@
> > +
> > +(
> > + atomic_dec_and_test@p1(&(a)->x)
> > +|
> > + atomic_dec_and_lock@p1(&(a)->x, ...)
> > +|
> > + atomic_long_dec_and_lock@p1(&(a)->x, ...)
> > +|
> > + atomic_long_dec_and_test@p1(&(a)->x)
> > +|
> > + atomic64_dec_and_test@p1(&(a)->x)
> > +|
> > + local_dec_and_test@p1(&(a)->x)
> > +)
> > +...
> > +y=a
> > +...
> > +fname@p2(y, ...);
> > +
> > +
> > +@script:python depends on report@
> > +p1 << r4.p1;
> > +p2 << r4.p2;
> > +@@
> > +msg = "atomic_dec_and_test variation before object free at line %s."
> > +coccilib.report.print_report(p1[0], msg % (p2[0].line))
> > +
> > +@r2 exists@
> > +identifier a, x;
> > +position p1;
> > +@@
> > +
> > +(
> > +atomic_add_unless(&(a)->x,-1,1)@p1
> > +|
> > +atomic_long_add_unless(&(a)->x,-1,1)@p1
> > +|
> > +atomic64_add_unless(&(a)->x,-1,1)@p1
> > +)
> > +
> > +@script:python depends on report@
> > +p1 << r2.p1;
> > +@@
> > +msg = "atomic_add_unless"
> > +coccilib.report.print_report(p1[0], msg)
> > +
> > +@r3 exists@
> > +identifier x;
> > +position p1;
> > +@@
> > +
> > +(
> > +x = atomic_add_return@p1(-1, ...);
> > +|
> > +x = atomic_long_add_return@p1(-1, ...);
> > +|
> > +x = atomic64_add_return@p1(-1, ...);
> > +)
> > +
> > +@script:python depends on report@
> > +p1 << r3.p1;
> > +@@
> > +msg = "x = atomic_add_return(-1, ...)"
> > +coccilib.report.print_report(p1[0], msg)
> > +
> > +
> > --
> > 2.7.4
> >
> >

[toc] | [prev] | [next] | [standalone]


#1723312 — RE: [PATCH] Coccinelle: add atomic_as_refcounter script

FromJulia Lawall <julia.lawall@lip6.fr>
Date2017-08-30 15:10 +0200
SubjectRE: [PATCH] Coccinelle: add atomic_as_refcounter script
Message-ID<ukaUP-i2-45@gated-at.bofh.it>
In reply to#1723275

On Wed, 30 Aug 2017, Reshetova, Elena wrote:

>
> >
> > On Wed, 30 Aug 2017, Elena Reshetova wrote:
> >
> > > atomic_as_refcounter.cocci script allows detecting
> > > cases when refcount_t type and API should be used
> > > instead of atomic_t.
> > >
> > > Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
> >
> > Acked-by: Julia Lawall <julia.lawall@lip6.fr>
>
> Thank you very much Julia! What is the correct path to merge this?
> I will resend with your acked-by, but what is the tree that should merge it?

Marek will take it.  If you want to resend, please get rid of the
metavariable y in the rule r1. It causes an unused variable warning.

julia

>
> Best Regards,
> Elena.
> >
> > > ---
> > >  scripts/coccinelle/api/atomic_as_refcounter.cocci | 131
> > ++++++++++++++++++++++
> > >  1 file changed, 131 insertions(+)
> > >  create mode 100644 scripts/coccinelle/api/atomic_as_refcounter.cocci
> > >
> > > diff --git a/scripts/coccinelle/api/atomic_as_refcounter.cocci
> > b/scripts/coccinelle/api/atomic_as_refcounter.cocci
> > > new file mode 100644
> > > index 0000000..f83771b
> > > --- /dev/null
> > > +++ b/scripts/coccinelle/api/atomic_as_refcounter.cocci
> > > @@ -0,0 +1,131 @@
> > > +// Check if refcount_t type and API should be used
> > > +// instead of atomic_t type when dealing with refcounters
> > > +//
> > > +// Copyright (c) 2016-2017, Elena Reshetova, Intel Corporation
> > > +//
> > > +// Confidence: Moderate
> > > +// URL: http://coccinelle.lip6.fr/
> > > +// Options: --include-headers --very-quiet
> > > +
> > > +virtual report
> > > +
> > > +@r1 exists@
> > > +identifier a, x, y;
> > > +position p1, p2;
> > > +identifier fname =~ ".*free.*";
> > > +identifier fname2 =~ ".*destroy.*";
> > > +identifier fname3 =~ ".*del.*";
> > > +identifier fname4 =~ ".*queue_work.*";
> > > +identifier fname5 =~ ".*schedule_work.*";
> > > +identifier fname6 =~ ".*call_rcu.*";
> > > +
> > > +@@
> > > +
> > > +(
> > > + atomic_dec_and_test@p1(&(a)->x)
> > > +|
> > > + atomic_dec_and_lock@p1(&(a)->x, ...)
> > > +|
> > > + atomic_long_dec_and_lock@p1(&(a)->x, ...)
> > > +|
> > > + atomic_long_dec_and_test@p1(&(a)->x)
> > > +|
> > > + atomic64_dec_and_test@p1(&(a)->x)
> > > +|
> > > + local_dec_and_test@p1(&(a)->x)
> > > +)
> > > +...
> > > +(
> > > + fname@p2(a, ...);
> > > +|
> > > + fname2@p2(...);
> > > +|
> > > + fname3@p2(...);
> > > +|
> > > + fname4@p2(...);
> > > +|
> > > + fname5@p2(...);
> > > +|
> > > + fname6@p2(...);
> > > +)
> > > +
> > > +
> > > +@script:python depends on report@
> > > +p1 << r1.p1;
> > > +p2 << r1.p2;
> > > +@@
> > > +msg = "atomic_dec_and_test variation before object free at line %s."
> > > +coccilib.report.print_report(p1[0], msg % (p2[0].line))
> > > +
> > > +@r4 exists@
> > > +identifier a, x, y;
> > > +position p1, p2;
> > > +identifier fname =~ ".*free.*";
> > > +
> > > +@@
> > > +
> > > +(
> > > + atomic_dec_and_test@p1(&(a)->x)
> > > +|
> > > + atomic_dec_and_lock@p1(&(a)->x, ...)
> > > +|
> > > + atomic_long_dec_and_lock@p1(&(a)->x, ...)
> > > +|
> > > + atomic_long_dec_and_test@p1(&(a)->x)
> > > +|
> > > + atomic64_dec_and_test@p1(&(a)->x)
> > > +|
> > > + local_dec_and_test@p1(&(a)->x)
> > > +)
> > > +...
> > > +y=a
> > > +...
> > > +fname@p2(y, ...);
> > > +
> > > +
> > > +@script:python depends on report@
> > > +p1 << r4.p1;
> > > +p2 << r4.p2;
> > > +@@
> > > +msg = "atomic_dec_and_test variation before object free at line %s."
> > > +coccilib.report.print_report(p1[0], msg % (p2[0].line))
> > > +
> > > +@r2 exists@
> > > +identifier a, x;
> > > +position p1;
> > > +@@
> > > +
> > > +(
> > > +atomic_add_unless(&(a)->x,-1,1)@p1
> > > +|
> > > +atomic_long_add_unless(&(a)->x,-1,1)@p1
> > > +|
> > > +atomic64_add_unless(&(a)->x,-1,1)@p1
> > > +)
> > > +
> > > +@script:python depends on report@
> > > +p1 << r2.p1;
> > > +@@
> > > +msg = "atomic_add_unless"
> > > +coccilib.report.print_report(p1[0], msg)
> > > +
> > > +@r3 exists@
> > > +identifier x;
> > > +position p1;
> > > +@@
> > > +
> > > +(
> > > +x = atomic_add_return@p1(-1, ...);
> > > +|
> > > +x = atomic_long_add_return@p1(-1, ...);
> > > +|
> > > +x = atomic64_add_return@p1(-1, ...);
> > > +)
> > > +
> > > +@script:python depends on report@
> > > +p1 << r3.p1;
> > > +@@
> > > +msg = "x = atomic_add_return(-1, ...)"
> > > +coccilib.report.print_report(p1[0], msg)
> > > +
> > > +
> > > --
> > > 2.7.4
> > >
> > >
>

[toc] | [prev] | [next] | [standalone]


#1724042 — RE: [PATCH] Coccinelle: add atomic_as_refcounter script

From"Reshetova, Elena" <elena.reshetova@intel.com>
Date2017-08-31 11:50 +0200
SubjectRE: [PATCH] Coccinelle: add atomic_as_refcounter script
Message-ID<ukugN-3VY-5@gated-at.bofh.it>
In reply to#1723312
> On Wed, 30 Aug 2017, Reshetova, Elena wrote:
> 
> >
> > >
> > > On Wed, 30 Aug 2017, Elena Reshetova wrote:
> > >
> > > > atomic_as_refcounter.cocci script allows detecting
> > > > cases when refcount_t type and API should be used
> > > > instead of atomic_t.
> > > >
> > > > Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
> > >
> > > Acked-by: Julia Lawall <julia.lawall@lip6.fr>
> >
> > Thank you very much Julia! What is the correct path to merge this?
> > I will resend with your acked-by, but what is the tree that should merge it?
> 
> Marek will take it.  If you want to resend, please get rid of the
> metavariable y in the rule r1. It causes an unused variable warning.

Sure, will do. Thank you!

Best Regards,
Elena.
> 
> julia
> 
> >
> > Best Regards,
> > Elena.
> > >
> > > > ---
> > > >  scripts/coccinelle/api/atomic_as_refcounter.cocci | 131
> > > ++++++++++++++++++++++
> > > >  1 file changed, 131 insertions(+)
> > > >  create mode 100644 scripts/coccinelle/api/atomic_as_refcounter.cocci
> > > >
> > > > diff --git a/scripts/coccinelle/api/atomic_as_refcounter.cocci
> > > b/scripts/coccinelle/api/atomic_as_refcounter.cocci
> > > > new file mode 100644
> > > > index 0000000..f83771b
> > > > --- /dev/null
> > > > +++ b/scripts/coccinelle/api/atomic_as_refcounter.cocci
> > > > @@ -0,0 +1,131 @@
> > > > +// Check if refcount_t type and API should be used
> > > > +// instead of atomic_t type when dealing with refcounters
> > > > +//
> > > > +// Copyright (c) 2016-2017, Elena Reshetova, Intel Corporation
> > > > +//
> > > > +// Confidence: Moderate
> > > > +// URL: http://coccinelle.lip6.fr/
> > > > +// Options: --include-headers --very-quiet
> > > > +
> > > > +virtual report
> > > > +
> > > > +@r1 exists@
> > > > +identifier a, x, y;
> > > > +position p1, p2;
> > > > +identifier fname =~ ".*free.*";
> > > > +identifier fname2 =~ ".*destroy.*";
> > > > +identifier fname3 =~ ".*del.*";
> > > > +identifier fname4 =~ ".*queue_work.*";
> > > > +identifier fname5 =~ ".*schedule_work.*";
> > > > +identifier fname6 =~ ".*call_rcu.*";
> > > > +
> > > > +@@
> > > > +
> > > > +(
> > > > + atomic_dec_and_test@p1(&(a)->x)
> > > > +|
> > > > + atomic_dec_and_lock@p1(&(a)->x, ...)
> > > > +|
> > > > + atomic_long_dec_and_lock@p1(&(a)->x, ...)
> > > > +|
> > > > + atomic_long_dec_and_test@p1(&(a)->x)
> > > > +|
> > > > + atomic64_dec_and_test@p1(&(a)->x)
> > > > +|
> > > > + local_dec_and_test@p1(&(a)->x)
> > > > +)
> > > > +...
> > > > +(
> > > > + fname@p2(a, ...);
> > > > +|
> > > > + fname2@p2(...);
> > > > +|
> > > > + fname3@p2(...);
> > > > +|
> > > > + fname4@p2(...);
> > > > +|
> > > > + fname5@p2(...);
> > > > +|
> > > > + fname6@p2(...);
> > > > +)
> > > > +
> > > > +
> > > > +@script:python depends on report@
> > > > +p1 << r1.p1;
> > > > +p2 << r1.p2;
> > > > +@@
> > > > +msg = "atomic_dec_and_test variation before object free at line %s."
> > > > +coccilib.report.print_report(p1[0], msg % (p2[0].line))
> > > > +
> > > > +@r4 exists@
> > > > +identifier a, x, y;
> > > > +position p1, p2;
> > > > +identifier fname =~ ".*free.*";
> > > > +
> > > > +@@
> > > > +
> > > > +(
> > > > + atomic_dec_and_test@p1(&(a)->x)
> > > > +|
> > > > + atomic_dec_and_lock@p1(&(a)->x, ...)
> > > > +|
> > > > + atomic_long_dec_and_lock@p1(&(a)->x, ...)
> > > > +|
> > > > + atomic_long_dec_and_test@p1(&(a)->x)
> > > > +|
> > > > + atomic64_dec_and_test@p1(&(a)->x)
> > > > +|
> > > > + local_dec_and_test@p1(&(a)->x)
> > > > +)
> > > > +...
> > > > +y=a
> > > > +...
> > > > +fname@p2(y, ...);
> > > > +
> > > > +
> > > > +@script:python depends on report@
> > > > +p1 << r4.p1;
> > > > +p2 << r4.p2;
> > > > +@@
> > > > +msg = "atomic_dec_and_test variation before object free at line %s."
> > > > +coccilib.report.print_report(p1[0], msg % (p2[0].line))
> > > > +
> > > > +@r2 exists@
> > > > +identifier a, x;
> > > > +position p1;
> > > > +@@
> > > > +
> > > > +(
> > > > +atomic_add_unless(&(a)->x,-1,1)@p1
> > > > +|
> > > > +atomic_long_add_unless(&(a)->x,-1,1)@p1
> > > > +|
> > > > +atomic64_add_unless(&(a)->x,-1,1)@p1
> > > > +)
> > > > +
> > > > +@script:python depends on report@
> > > > +p1 << r2.p1;
> > > > +@@
> > > > +msg = "atomic_add_unless"
> > > > +coccilib.report.print_report(p1[0], msg)
> > > > +
> > > > +@r3 exists@
> > > > +identifier x;
> > > > +position p1;
> > > > +@@
> > > > +
> > > > +(
> > > > +x = atomic_add_return@p1(-1, ...);
> > > > +|
> > > > +x = atomic_long_add_return@p1(-1, ...);
> > > > +|
> > > > +x = atomic64_add_return@p1(-1, ...);
> > > > +)
> > > > +
> > > > +@script:python depends on report@
> > > > +p1 << r3.p1;
> > > > +@@
> > > > +msg = "x = atomic_add_return(-1, ...)"
> > > > +coccilib.report.print_report(p1[0], msg)
> > > > +
> > > > +
> > > > --
> > > > 2.7.4
> > > >
> > > >
> >

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web