1 /// Find nested lock+irqsave functions that use the same flags variables
4 // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
5 // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2.
6 // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2.
7 // URL: http://coccinelle.lip6.fr/
9 // Options: -no_includes -include_headers
16 expression lock1,lock2,flags;
21 spin_lock_irqsave@p1(lock1,flags)
23 read_lock_irqsave@p1(lock1,flags)
25 write_lock_irqsave@p1(lock1,flags)
29 spin_lock_irqsave(lock1,flags)
31 read_lock_irqsave(lock1,flags)
33 write_lock_irqsave(lock1,flags)
35 spin_lock_irqsave@p2(lock2,flags)
37 read_lock_irqsave@p2(lock2,flags)
39 write_lock_irqsave@p2(lock2,flags)
43 expression f <= r.flags;
44 expression lock1,lock2,flags;
49 *spin_lock_irqsave@p1(lock1,flags)
51 *read_lock_irqsave@p1(lock1,flags)
53 *write_lock_irqsave@p1(lock1,flags)
57 *spin_lock_irqsave@p2(lock2,flags)
59 *read_lock_irqsave@p2(lock2,flags)
61 *write_lock_irqsave@p2(lock2,flags)
64 // ----------------------------------------------------------------------
66 @script:python depends on d && org@
71 cocci.print_main("original lock",p1)
72 cocci.print_secs("nested lock+irqsave that reuses flags",p2)
74 @script:python depends on d && report@
79 msg="ERROR: nested lock+irqsave that reuses flags from %s." % (p1[0].line)
80 coccilib.report.print_report(p2[0], msg)