diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/coccinelle/free/pci_free_consistent.cocci | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/scripts/coccinelle/free/pci_free_consistent.cocci b/scripts/coccinelle/free/pci_free_consistent.cocci new file mode 100644 index 000000000000..43600ccb62a8 --- /dev/null +++ b/scripts/coccinelle/free/pci_free_consistent.cocci | |||
@@ -0,0 +1,52 @@ | |||
1 | /// Find missing pci_free_consistent for every pci_alloc_consistent. | ||
2 | /// | ||
3 | // Confidence: Moderate | ||
4 | // Copyright: (C) 2013 Petr Strnad. GPLv2. | ||
5 | // URL: http://coccinelle.lip6.fr/ | ||
6 | // Keywords: pci_free_consistent, pci_alloc_consistent | ||
7 | // Options: --no-includes --include-headers | ||
8 | |||
9 | virtual report | ||
10 | virtual org | ||
11 | |||
12 | @search@ | ||
13 | local idexpression id; | ||
14 | expression x,y,z,e; | ||
15 | position p1,p2; | ||
16 | type T; | ||
17 | @@ | ||
18 | |||
19 | id = pci_alloc_consistent@p1(x,y,&z) | ||
20 | ... when != e = id | ||
21 | if (id == NULL || ...) { ... return ...; } | ||
22 | ... when != pci_free_consistent(x,y,id,z) | ||
23 | when != if (id) { ... pci_free_consistent(x,y,id,z) ... } | ||
24 | when != if (y) { ... pci_free_consistent(x,y,id,z) ... } | ||
25 | when != e = (T)id | ||
26 | when exists | ||
27 | ( | ||
28 | return 0; | ||
29 | | | ||
30 | return 1; | ||
31 | | | ||
32 | return id; | ||
33 | | | ||
34 | return@p2 ...; | ||
35 | ) | ||
36 | |||
37 | @script:python depends on report@ | ||
38 | p1 << search.p1; | ||
39 | p2 << search.p2; | ||
40 | @@ | ||
41 | |||
42 | msg = "ERROR: missing pci_free_consistent; pci_alloc_consistent on line %s and return without freeing on line %s" % (p1[0].line,p2[0].line) | ||
43 | coccilib.report.print_report(p2[0],msg) | ||
44 | |||
45 | @script:python depends on org@ | ||
46 | p1 << search.p1; | ||
47 | p2 << search.p2; | ||
48 | @@ | ||
49 | |||
50 | msg = "ERROR: missing pci_free_consistent; pci_alloc_consistent on line %s and return without freeing on line %s" % (p1[0].line,p2[0].line) | ||
51 | cocci.print_main(msg,p1) | ||
52 | cocci.print_secs("",p2) | ||