~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/coccinelle/api/atomic_as_refcounter.cocci

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-only
  2 // Check if refcount_t type and API should be used
  3 // instead of atomic_t type when dealing with refcounters
  4 //
  5 // Copyright (c) 2016-2017, Elena Reshetova, Intel Corporation
  6 //
  7 // Confidence: Moderate
  8 // URL: https://coccinelle.gitlabpages.inria.fr/website
  9 // Options: --include-headers --very-quiet
 10 
 11 virtual report
 12 
 13 @r1 exists@
 14 identifier a, x;
 15 position p1, p2;
 16 identifier fname =~ ".*free.*";
 17 identifier fname2 =~ ".*destroy.*";
 18 identifier fname3 =~ ".*del.*";
 19 identifier fname4 =~ ".*queue_work.*";
 20 identifier fname5 =~ ".*schedule_work.*";
 21 identifier fname6 =~ ".*call_rcu.*";
 22 
 23 @@
 24 
 25 (
 26  atomic_dec_and_test@p1(&(a)->x)
 27 |
 28  atomic_dec_and_lock@p1(&(a)->x, ...)
 29 |
 30  atomic_long_dec_and_lock@p1(&(a)->x, ...)
 31 |
 32  atomic_long_dec_and_test@p1(&(a)->x)
 33 |
 34  atomic64_dec_and_test@p1(&(a)->x)
 35 |
 36  local_dec_and_test@p1(&(a)->x)
 37 )
 38 ...
 39 (
 40  fname@p2(a, ...);
 41 |
 42  fname2@p2(...);
 43 |
 44  fname3@p2(...);
 45 |
 46  fname4@p2(...);
 47 |
 48  fname5@p2(...);
 49 |
 50  fname6@p2(...);
 51 )
 52 
 53 
 54 @script:python depends on report@
 55 p1 << r1.p1;
 56 p2 << r1.p2;
 57 @@
 58 msg = "WARNING: atomic_dec_and_test variation before object free at line %s."
 59 coccilib.report.print_report(p1[0], msg % (p2[0].line))
 60 
 61 @r4 exists@
 62 identifier a, x, y;
 63 position p1, p2;
 64 identifier fname =~ ".*free.*";
 65 
 66 @@
 67 
 68 (
 69  atomic_dec_and_test@p1(&(a)->x)
 70 |
 71  atomic_dec_and_lock@p1(&(a)->x, ...)
 72 |
 73  atomic_long_dec_and_lock@p1(&(a)->x, ...)
 74 |
 75  atomic_long_dec_and_test@p1(&(a)->x)
 76 |
 77  atomic64_dec_and_test@p1(&(a)->x)
 78 |
 79  local_dec_and_test@p1(&(a)->x)
 80 )
 81 ...
 82 y=a
 83 ...
 84 fname@p2(y, ...);
 85 
 86 
 87 @script:python depends on report@
 88 p1 << r4.p1;
 89 p2 << r4.p2;
 90 @@
 91 msg = "WARNING: atomic_dec_and_test variation before object free at line %s."
 92 coccilib.report.print_report(p1[0], msg % (p2[0].line))
 93 
 94 @r2 exists@
 95 identifier a, x;
 96 position p1;
 97 @@
 98 
 99 (
100 atomic_add_unless(&(a)->x,-1,1)@p1
101 |
102 atomic_long_add_unless(&(a)->x,-1,1)@p1
103 |
104 atomic64_add_unless(&(a)->x,-1,1)@p1
105 )
106 
107 @script:python depends on report@
108 p1 << r2.p1;
109 @@
110 msg = "WARNING: atomic_add_unless"
111 coccilib.report.print_report(p1[0], msg)
112 
113 @r3 exists@
114 identifier x;
115 position p1;
116 @@
117 
118 (
119 x = atomic_add_return@p1(-1, ...);
120 |
121 x = atomic_long_add_return@p1(-1, ...);
122 |
123 x = atomic64_add_return@p1(-1, ...);
124 )
125 
126 @script:python depends on report@
127 p1 << r3.p1;
128 @@
129 msg = "WARNING: x = atomic_add_return(-1, ...)"
130 coccilib.report.print_report(p1[0], msg)

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php