drm/panfrost: Remove set but not used variable 'bo'
[linux/fpc-iii.git] / scripts / coccinelle / api / alloc / zalloc-simple.cocci
blob26cda3f48f01533a67684aab82cb3ad854ea9d71
1 // SPDX-License-Identifier: GPL-2.0-only
2 ///
3 /// Use zeroing allocator rather than allocator followed by memset with 0
4 ///
5 /// This considers some simple cases that are common and easy to validate
6 /// Note in particular that there are no ...s in the rule, so all of the
7 /// matched code has to be contiguous
8 ///
9 // Confidence: High
10 // Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU.
11 // Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6.
12 // Copyright: (C) 2017 Himanshu Jha
13 // URL: http://coccinelle.lip6.fr/rules/kzalloc.html
14 // Options: --no-includes --include-headers
16 // Keywords: kmalloc, kzalloc
17 // Version min: < 2.6.12 kmalloc
18 // Version min:   2.6.14 kzalloc
21 virtual context
22 virtual patch
23 virtual org
24 virtual report
26 //----------------------------------------------------------
27 //  For context mode
28 //----------------------------------------------------------
30 @depends on context@
31 type T, T2;
32 expression x;
33 expression E1;
34 statement S;
37 * x = (T)\(kmalloc(E1, ...)\|vmalloc(E1)\|dma_alloc_coherent(...,E1,...)\|
38   kmalloc_node(E1, ...)\|kmem_cache_alloc(...)\|kmem_alloc(E1, ...)\|
39   devm_kmalloc(...,E1,...)\|kvmalloc(E1, ...)\|kvmalloc_node(E1,...)\);
40   if ((x==NULL) || ...) S
41 * memset((T2)x,0,E1);
43 //----------------------------------------------------------
44 //  For patch mode
45 //----------------------------------------------------------
47 @depends on patch@
48 type T, T2;
49 expression x;
50 expression E1,E2,E3,E4;
51 statement S;
55 - x = kmalloc(E1,E2);
56 + x = kzalloc(E1,E2);
58 - x = (T *)kmalloc(E1,E2);
59 + x = kzalloc(E1,E2);
61 - x = (T)kmalloc(E1,E2);
62 + x = (T)kzalloc(E1,E2);
64 - x = vmalloc(E1);
65 + x = vzalloc(E1);
67 - x = (T *)vmalloc(E1);
68 + x = vzalloc(E1);
70 - x = (T)vmalloc(E1);
71 + x = (T)vzalloc(E1);
73 - x = kmalloc_node(E1,E2,E3);
74 + x = kzalloc_node(E1,E2,E3);
76 - x = (T *)kmalloc_node(E1,E2,E3);
77 + x = kzalloc_node(E1,E2,E3);
79 - x = (T)kmalloc_node(E1,E2,E3);
80 + x = (T)kzalloc_node(E1,E2,E3);
82 - x = kmem_cache_alloc(E3,E4);
83 + x = kmem_cache_zalloc(E3,E4);
85 - x = (T *)kmem_cache_alloc(E3,E4);
86 + x = kmem_cache_zalloc(E3,E4);
88 - x = (T)kmem_cache_alloc(E3,E4);
89 + x = (T)kmem_cache_zalloc(E3,E4);
91 - x = kmem_alloc(E1,E2);
92 + x = kmem_zalloc(E1,E2);
94 - x = (T *)kmem_alloc(E1,E2);
95 + x = kmem_zalloc(E1,E2);
97 - x = (T)kmem_alloc(E1,E2);
98 + x = (T)kmem_zalloc(E1,E2);
100 - x = devm_kmalloc(E2,E1,E3);
101 + x = devm_kzalloc(E2,E1,E3);
103 - x = (T *)devm_kmalloc(E2,E1,E3);
104 + x = devm_kzalloc(E2,E1,E3);
106 - x = (T)devm_kmalloc(E2,E1,E3);
107 + x = (T)devm_kzalloc(E2,E1,E3);
109 - x = kvmalloc(E1,E2);
110 + x = kvzalloc(E1,E2);
112 - x = (T *)kvmalloc(E1,E2);
113 + x = kvzalloc(E1,E2);
115 - x = (T)kvmalloc(E1,E2);
116 + x = (T)kvzalloc(E1,E2);
118 - x = kvmalloc_node(E1,E2,E3);
119 + x = kvzalloc_node(E1,E2,E3);
121 - x = (T *)kvmalloc_node(E1,E2,E3);
122 + x = kvzalloc_node(E1,E2,E3);
124 - x = (T)kvmalloc_node(E1,E2,E3);
125 + x = (T)kvzalloc_node(E1,E2,E3);
127   if ((x==NULL) || ...) S
128 - memset((T2)x,0,E1);
130 //----------------------------------------------------------
131 //  For org mode
132 //----------------------------------------------------------
134 @r depends on org || report@
135 type T, T2;
136 expression x;
137 expression E1,E2;
138 statement S;
139 position p;
142  x = (T)kmalloc@p(E1,E2);
143  if ((x==NULL) || ...) S
144  memset((T2)x,0,E1);
146 @script:python depends on org@
147 p << r.p;
148 x << r.x;
151 msg="%s" % (x)
152 msg_safe=msg.replace("[","@(").replace("]",")")
153 coccilib.org.print_todo(p[0], msg_safe)
155 @script:python depends on report@
156 p << r.p;
157 x << r.x;
160 msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x)
161 coccilib.report.print_report(p[0], msg)
163 //-----------------------------------------------------------------
164 @r1 depends on org || report@
165 type T, T2;
166 expression x;
167 expression E1;
168 statement S;
169 position p;
172  x = (T)vmalloc@p(E1);
173  if ((x==NULL) || ...) S
174  memset((T2)x,0,E1);
176 @script:python depends on org@
177 p << r1.p;
178 x << r1.x;
181 msg="%s" % (x)
182 msg_safe=msg.replace("[","@(").replace("]",")")
183 coccilib.org.print_todo(p[0], msg_safe)
185 @script:python depends on report@
186 p << r1.p;
187 x << r1.x;
190 msg="WARNING: vzalloc should be used for %s, instead of vmalloc/memset" % (x)
191 coccilib.report.print_report(p[0], msg)
193 //-----------------------------------------------------------------
194 @r2 depends on org || report@
195 type T, T2;
196 expression x;
197 expression E1,E2,E3,E4;
198 statement S;
199 position p;
202  x = (T)dma_alloc_coherent@p(E2,E1,E3,E4);
203  if ((x==NULL) || ...) S
204  memset((T2)x,0,E1);
206 @script:python depends on org@
207 p << r2.p;
208 x << r2.x;
211 msg="%s" % (x)
212 msg_safe=msg.replace("[","@(").replace("]",")")
213 coccilib.org.print_todo(p[0], msg_safe)
215 @script:python depends on report@
216 p << r2.p;
217 x << r2.x;
220 msg="WARNING: dma_alloc_coherent use in %s already zeroes out memory,  so memset is not needed" % (x)
221 coccilib.report.print_report(p[0], msg)
223 //-----------------------------------------------------------------
224 @r3 depends on org || report@
225 type T, T2;
226 expression x;
227 expression E1,E2,E3;
228 statement S;
229 position p;
232  x = (T)kmalloc_node@p(E1,E2,E3);
233  if ((x==NULL) || ...) S
234  memset((T2)x,0,E1);
236 @script:python depends on org@
237 p << r3.p;
238 x << r3.x;
241 msg="%s" % (x)
242 msg_safe=msg.replace("[","@(").replace("]",")")
243 coccilib.org.print_todo(p[0], msg_safe)
245 @script:python depends on report@
246 p << r3.p;
247 x << r3.x;
250 msg="WARNING: kzalloc_node should be used for %s, instead of kmalloc_node/memset" % (x)
251 coccilib.report.print_report(p[0], msg)
253 //-----------------------------------------------------------------
254 @r4 depends on org || report@
255 type T, T2;
256 expression x;
257 expression E1,E2,E3;
258 statement S;
259 position p;
262  x = (T)kmem_cache_alloc@p(E2,E3);
263  if ((x==NULL) || ...) S
264  memset((T2)x,0,E1);
266 @script:python depends on org@
267 p << r4.p;
268 x << r4.x;
271 msg="%s" % (x)
272 msg_safe=msg.replace("[","@(").replace("]",")")
273 coccilib.org.print_todo(p[0], msg_safe)
275 @script:python depends on report@
276 p << r4.p;
277 x << r4.x;
280 msg="WARNING: kmem_cache_zalloc should be used for %s, instead of kmem_cache_alloc/memset" % (x)
281 coccilib.report.print_report(p[0], msg)
283 //-----------------------------------------------------------------
284 @r5 depends on org || report@
285 type T, T2;
286 expression x;
287 expression E1,E2;
288 statement S;
289 position p;
292  x = (T)kmem_alloc@p(E1,E2);
293  if ((x==NULL) || ...) S
294  memset((T2)x,0,E1);
296 @script:python depends on org@
297 p << r5.p;
298 x << r5.x;
301 msg="%s" % (x)
302 msg_safe=msg.replace("[","@(").replace("]",")")
303 coccilib.org.print_todo(p[0], msg_safe)
305 @script:python depends on report@
306 p << r5.p;
307 x << r5.x;
310 msg="WARNING: kmem_zalloc should be used for %s, instead of kmem_alloc/memset" % (x)
311 coccilib.report.print_report(p[0], msg)
313 //-----------------------------------------------------------------
314 @r6 depends on org || report@
315 type T, T2;
316 expression x;
317 expression E1,E2,E3;
318 statement S;
319 position p;
322  x = (T)devm_kmalloc@p(E2,E1,E3);
323  if ((x==NULL) || ...) S
324  memset((T2)x,0,E1);
326 @script:python depends on org@
327 p << r6.p;
328 x << r6.x;
331 msg="%s" % (x)
332 msg_safe=msg.replace("[","@(").replace("]",")")
333 coccilib.org.print_todo(p[0], msg_safe)
335 @script:python depends on report@
336 p << r6.p;
337 x << r6.x;
340 msg="WARNING: devm_kzalloc should be used for %s, instead of devm_kmalloc/memset" % (x)
341 coccilib.report.print_report(p[0], msg)
343 //-----------------------------------------------------------------
344 @r7 depends on org || report@
345 type T, T2;
346 expression x;
347 expression E1,E2;
348 statement S;
349 position p;
352  x = (T)kvmalloc@p(E1,E2);
353  if ((x==NULL) || ...) S
354  memset((T2)x,0,E1);
356 @script:python depends on org@
357 p << r7.p;
358 x << r7.x;
361 msg="%s" % (x)
362 msg_safe=msg.replace("[","@(").replace("]",")")
363 coccilib.org.print_todo(p[0], msg_safe)
365 @script:python depends on report@
366 p << r7.p;
367 x << r7.x;
370 msg="WARNING: kvzalloc should be used for %s, instead of kvmalloc/memset" % (x)
371 coccilib.report.print_report(p[0], msg)
373 //-----------------------------------------------------------------
374 @r9 depends on org || report@
375 type T, T2;
376 expression x;
377 expression E1,E2,E3;
378 statement S;
379 position p;
382  x = (T)kvmalloc_node@p(E1,E2,E3);
383  if ((x==NULL) || ...) S
384  memset((T2)x,0,E1);
386 @script:python depends on org@
387 p << r9.p;
388 x << r9.x;
391 msg="%s" % (x)
392 msg_safe=msg.replace("[","@(").replace("]",")")
393 coccilib.org.print_todo(p[0], msg_safe)
395 @script:python depends on report@
396 p << r9.p;
397 x << r9.x;
400 msg="WARNING: kvzalloc_node should be used for %s, instead of kvmalloc_node/memset" % (x)
401 coccilib.report.print_report(p[0], msg)