Linux Audio

Check our new training course

Yocto distribution development and maintenance

Need a Yocto distribution for your embedded project?
Loading...
Note: File does not exist in v4.17.
  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: http://coccinelle.lip6.fr/
  9// Options: --include-headers --very-quiet
 10
 11virtual report
 12
 13@r1 exists@
 14identifier a, x;
 15position p1, p2;
 16identifier fname =~ ".*free.*";
 17identifier fname2 =~ ".*destroy.*";
 18identifier fname3 =~ ".*del.*";
 19identifier fname4 =~ ".*queue_work.*";
 20identifier fname5 =~ ".*schedule_work.*";
 21identifier 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@
 55p1 << r1.p1;
 56p2 << r1.p2;
 57@@
 58msg = "atomic_dec_and_test variation before object free at line %s."
 59coccilib.report.print_report(p1[0], msg % (p2[0].line))
 60
 61@r4 exists@
 62identifier a, x, y;
 63position p1, p2;
 64identifier 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...
 82y=a
 83...
 84fname@p2(y, ...);
 85
 86
 87@script:python depends on report@
 88p1 << r4.p1;
 89p2 << r4.p2;
 90@@
 91msg = "atomic_dec_and_test variation before object free at line %s."
 92coccilib.report.print_report(p1[0], msg % (p2[0].line))
 93
 94@r2 exists@
 95identifier a, x;
 96position p1;
 97@@
 98
 99(
100atomic_add_unless(&(a)->x,-1,1)@p1
101|
102atomic_long_add_unless(&(a)->x,-1,1)@p1
103|
104atomic64_add_unless(&(a)->x,-1,1)@p1
105)
106
107@script:python depends on report@
108p1 << r2.p1;
109@@
110msg = "atomic_add_unless"
111coccilib.report.print_report(p1[0], msg)
112
113@r3 exists@
114identifier x;
115position p1;
116@@
117
118(
119x = atomic_add_return@p1(-1, ...);
120|
121x = atomic_long_add_return@p1(-1, ...);
122|
123x = atomic64_add_return@p1(-1, ...);
124)
125
126@script:python depends on report@
127p1 << r3.p1;
128@@
129msg = "x = atomic_add_return(-1, ...)"
130coccilib.report.print_report(p1[0], msg)