Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1723051 > unrolled thread
| Started by | Elena Reshetova <elena.reshetova@intel.com> |
|---|---|
| First post | 2017-08-30 08:20 +0200 |
| Last post | 2017-08-31 11:50 +0200 |
| Articles | 6 — 3 participants |
Back to article view | Back to linux.kernel
[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
| From | Elena Reshetova <elena.reshetova@intel.com> |
|---|---|
| Date | 2017-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]
| From | Elena Reshetova <elena.reshetova@intel.com> |
|---|---|
| Date | 2017-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]
| From | Julia Lawall <julia.lawall@lip6.fr> |
|---|---|
| Date | 2017-08-30 14:30 +0200 |
| Subject | Re: [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]
| From | "Reshetova, Elena" <elena.reshetova@intel.com> |
|---|---|
| Date | 2017-08-30 14:50 +0200 |
| Subject | RE: [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]
| From | Julia Lawall <julia.lawall@lip6.fr> |
|---|---|
| Date | 2017-08-30 15:10 +0200 |
| Subject | RE: [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]
| From | "Reshetova, Elena" <elena.reshetova@intel.com> |
|---|---|
| Date | 2017-08-31 11:50 +0200 |
| Subject | RE: [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