Blame view
scripts/coccinelle/locks/flags.cocci
1.53 KB
10247179a Coccinelle: Find ... |
1 2 3 |
/// Find nested lock+irqsave functions that use the same flags variables /// // Confidence: High |
29a36d4de scripts/coccinell... |
4 5 6 |
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. |
10247179a Coccinelle: Find ... |
7 8 9 10 11 12 13 |
// URL: http://coccinelle.lip6.fr/ // Comments: // Options: -no_includes -include_headers virtual context virtual org virtual report |
29a36d4de scripts/coccinell... |
14 |
@r exists@ |
10247179a Coccinelle: Find ... |
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
expression lock1,lock2,flags; position p1,p2; @@ ( spin_lock_irqsave@p1(lock1,flags) | read_lock_irqsave@p1(lock1,flags) | write_lock_irqsave@p1(lock1,flags) ) ... when != flags ( spin_lock_irqsave(lock1,flags) | read_lock_irqsave(lock1,flags) | write_lock_irqsave(lock1,flags) | spin_lock_irqsave@p2(lock2,flags) | read_lock_irqsave@p2(lock2,flags) | write_lock_irqsave@p2(lock2,flags) ) |
29a36d4de scripts/coccinell... |
40 |
@d exists@ |
10247179a Coccinelle: Find ... |
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
expression f <= r.flags; expression lock1,lock2,flags; position r.p1, r.p2; @@ ( *spin_lock_irqsave@p1(lock1,flags) | *read_lock_irqsave@p1(lock1,flags) | *write_lock_irqsave@p1(lock1,flags) ) ... when != f ( *spin_lock_irqsave@p2(lock2,flags) | *read_lock_irqsave@p2(lock2,flags) | *write_lock_irqsave@p2(lock2,flags) ) // ---------------------------------------------------------------------- @script:python depends on d && org@ p1 << r.p1; p2 << r.p2; @@ cocci.print_main("original lock",p1) cocci.print_secs("nested lock+irqsave that reuses flags",p2) @script:python depends on d && report@ p1 << r.p1; p2 << r.p2; @@ |
29a36d4de scripts/coccinell... |
76 |
msg="ERROR: nested lock+irqsave that reuses flags from line %s." % (p1[0].line) |
10247179a Coccinelle: Find ... |
77 |
coccilib.report.print_report(p2[0], msg) |