1 // SPDX-License-Identifier: GPL-2.0-only
2 /// Find functions that refer to GFP_KERNEL but are called with locks held.
3 //# The proposed change of converting the GFP_KERNEL is not necessarily the
4 //# correct one. It may be desired to unlock the lock, or to not call the
5 //# function under the lock in the first place.
7 // Confidence: Moderate
8 // Copyright: (C) 2012 Nicolas Palix.
9 // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
10 // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
11 // URL: http://coccinelle.lip6.fr/
13 // Options: --no-includes --include-headers
26 ... when != read_unlock_irq(...)
27 when != write_unlock_irq(...)
28 when != read_unlock_irqrestore(...)
29 when != write_unlock_irqrestore(...)
30 when != spin_unlock(...)
31 when != spin_unlock_irq(...)
32 when != spin_unlock_irqrestore(...)
33 when != local_irq_enable(...)
64 ... when != read_unlock_irq(...)
65 when != write_unlock_irq(...)
66 when != read_unlock_irqrestore(...)
67 when != write_unlock_irqrestore(...)
68 when != spin_unlock(...)
69 when != spin_unlock_irq(...)
70 when != spin_unlock_irqrestore(...)
71 when != local_irq_enable(...)
74 @depends on locked && patch@
81 @depends on locked && !patch@
87 @script:python depends on !patch && org@
94 cocci.print_main("lock",p1)
95 cocci.print_secs("call",p2)
96 cocci.print_secs("GFP_KERNEL",p)
98 @script:python depends on !patch && report@
105 msg = "ERROR: function %s called on line %s inside lock on line %s but uses GFP_KERNEL" % (fn,p2[0].line,p1[0].line)
106 coccilib.report.print_report(p[0], msg)