From: Julia Lawall <julia.lawall@lip6.fr> To: Elena Reshetova <elena.reshetova@intel.com> Cc: linux-kernel@vger.kernel.org, cocci@systeme.lip6.fr, Gilles Muller <Gilles.Muller@lip6.fr>, nicolas.palix@imag.fr, mmarek@suse.com, keescook@chromium.org, ishkamiel@gmail.com Subject: Re: [PATCH] Coccinelle: add atomic_as_refcounter script Date: Mon, 14 Aug 2017 16:16:27 +0200 (CEST) [thread overview] Message-ID: <alpine.DEB.2.20.1708141615160.26080@hadrien> (raw) In-Reply-To: <1502690386-5605-2-git-send-email-elena.reshetova@intel.com> On Mon, 14 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> > --- > scripts/coccinelle/api/atomic_as_refcounter.cocci | 148 ++++++++++++++++++++++ > 1 file changed, 148 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..996d72b > --- /dev/null > +++ b/scripts/coccinelle/api/atomic_as_refcounter.cocci > @@ -0,0 +1,148 @@ > +// 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.*"; > +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) > +) > +... > +y=a > +... > +( > + fname@p2(y, ...); > +| > + fname2@p2(...); >From here to the end of the rule there is no a or y. So they would match the same thing as in the previous rule. so you could get rid of all of these cases, and just leave fname@p2(y, ...); julia > +| > + fname3@p2(...); > +| > + fname4@p2(...); > +| > + fname5@p2(...); > +| > + fname6@p2(...); > +) > + > + > +@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 > >
WARNING: multiple messages have this Message-ID (diff)
From: julia.lawall@lip6.fr (Julia Lawall) To: cocci@systeme.lip6.fr Subject: [Cocci] [PATCH] Coccinelle: add atomic_as_refcounter script Date: Mon, 14 Aug 2017 16:16:27 +0200 (CEST) [thread overview] Message-ID: <alpine.DEB.2.20.1708141615160.26080@hadrien> (raw) In-Reply-To: <1502690386-5605-2-git-send-email-elena.reshetova@intel.com> On Mon, 14 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> > --- > scripts/coccinelle/api/atomic_as_refcounter.cocci | 148 ++++++++++++++++++++++ > 1 file changed, 148 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..996d72b > --- /dev/null > +++ b/scripts/coccinelle/api/atomic_as_refcounter.cocci > @@ -0,0 +1,148 @@ > +// 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 > + > + at 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 at p1(&(a)->x) > +| > + atomic_dec_and_lock at p1(&(a)->x, ...) > +| > + atomic_long_dec_and_lock at p1(&(a)->x, ...) > +| > + atomic_long_dec_and_test at p1(&(a)->x) > +| > + atomic64_dec_and_test at p1(&(a)->x) > +| > + local_dec_and_test at p1(&(a)->x) > +) > +... > +( > + fname at p2(a, ...); > +| > + fname2 at p2(...); > +| > + fname3 at p2(...); > +| > + fname4 at p2(...); > +| > + fname5 at p2(...); > +| > + fname6 at p2(...); > +) > + > + > + at 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)) > + > + at r4 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 at p1(&(a)->x) > +| > + atomic_dec_and_lock at p1(&(a)->x, ...) > +| > + atomic_long_dec_and_lock at p1(&(a)->x, ...) > +| > + atomic_long_dec_and_test at p1(&(a)->x) > +| > + atomic64_dec_and_test at p1(&(a)->x) > +| > + local_dec_and_test at p1(&(a)->x) > +) > +... > +y=a > +... > +( > + fname at p2(y, ...); > +| > + fname2 at p2(...); >From here to the end of the rule there is no a or y. So they would match the same thing as in the previous rule. so you could get rid of all of these cases, and just leave fname at p2(y, ...); julia > +| > + fname3 at p2(...); > +| > + fname4 at p2(...); > +| > + fname5 at p2(...); > +| > + fname6 at p2(...); > +) > + > + > + at 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)) > + > + at 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 > +) > + > + at script:python depends on report@ > +p1 << r2.p1; > +@@ > +msg = "atomic_add_unless" > +coccilib.report.print_report(p1[0], msg) > + > + at r3 exists@ > +identifier x; > +position p1; > +@@ > + > +( > +x = atomic_add_return at p1(-1, ...); > +| > +x = atomic_long_add_return at p1(-1, ...); > +| > +x = atomic64_add_return at p1(-1, ...); > +) > + > + at script:python depends on report@ > +p1 << r3.p1; > +@@ > +msg = "x = atomic_add_return(-1, ...)" > +coccilib.report.print_report(p1[0], msg) > + > + > -- > 2.7.4 > >
next prev parent reply other threads:[~2017-08-14 14:16 UTC|newest] Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-08-14 5:59 [PATCH v2] coccinelle: provide rule for finding refcounters Elena Reshetova 2017-08-14 5:59 ` [Cocci] " Elena Reshetova 2017-08-14 5:59 ` [PATCH] Coccinelle: add atomic_as_refcounter script Elena Reshetova 2017-08-14 5:59 ` [Cocci] " Elena Reshetova 2017-08-14 14:16 ` Julia Lawall [this message] 2017-08-14 14:16 ` Julia Lawall 2017-08-15 12:19 ` Reshetova, Elena 2017-08-15 12:19 ` [Cocci] " Reshetova, Elena 2017-08-15 10:55 ` [Cocci] " SF Markus Elfring 2017-08-15 11:02 ` Julia Lawall 2017-08-15 16:43 ` SF Markus Elfring -- strict thread matches above, loose matches on Subject: below -- 2017-09-01 9:40 [PATCH] " Elena Reshetova 2018-06-14 23:58 ` Kees Cook 2018-06-15 5:06 ` Julia Lawall 2018-06-18 13:47 ` Masahiro Yamada 2017-08-30 6:15 [PATCH v4] provide rule for finding refcounters Elena Reshetova 2017-08-30 6:15 ` [PATCH] Coccinelle: add atomic_as_refcounter script Elena Reshetova 2017-08-30 12:26 ` Julia Lawall 2017-08-30 12:44 ` Reshetova, Elena 2017-08-30 13:06 ` Julia Lawall 2017-08-31 9:46 ` Reshetova, Elena 2017-08-16 11:52 [PATCH v3] provide rule for finding refcounters Elena Reshetova 2017-08-16 11:52 ` [PATCH] Coccinelle: add atomic_as_refcounter script Elena Reshetova 2017-08-17 11:50 ` Julia Lawall 2017-08-29 9:01 ` Reshetova, Elena 2017-07-18 7:48 [PATCH] Coccinelle report script for refcounters Elena Reshetova 2017-07-18 7:48 ` [PATCH] Coccinelle: add atomic_as_refcounter script Elena Reshetova 2017-07-18 16:21 ` Kees Cook 2017-07-19 10:54 ` Reshetova, Elena 2017-08-04 15:23 ` Julia Lawall 2017-08-07 11:06 ` Reshetova, Elena
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=alpine.DEB.2.20.1708141615160.26080@hadrien \ --to=julia.lawall@lip6.fr \ --cc=Gilles.Muller@lip6.fr \ --cc=cocci@systeme.lip6.fr \ --cc=elena.reshetova@intel.com \ --cc=ishkamiel@gmail.com \ --cc=keescook@chromium.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mmarek@suse.com \ --cc=nicolas.palix@imag.fr \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.