scripts/coccinelle: improve the coverage of some semantic patches
This patch ensures that all semantic patches in the scripts/coccinelle directory provide the report option. Report messages that include line numbers now have the line number preceded by "line" for easier subsequent processing. Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr> Signed-off-by: Michal Marek <mmarek@suse.cz>
This commit is contained in:

committed by
Michal Marek

parent
fb3f8af4ff
commit
29a36d4dec
@@ -1,17 +1,20 @@
|
||||
/// Find functions that refer to GFP_KERNEL but are called with locks held.
|
||||
/// The proposed change of converting the GFP_KERNEL is not necessarily the
|
||||
/// correct one. It may be desired to unlock the lock, or to not call the
|
||||
/// function under the lock in the first place.
|
||||
//# The proposed change of converting the GFP_KERNEL is not necessarily the
|
||||
//# correct one. It may be desired to unlock the lock, or to not call the
|
||||
//# function under the lock in the first place.
|
||||
///
|
||||
// Confidence: Moderate
|
||||
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
|
||||
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2.
|
||||
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// Copyright: (C) 2012 Nicolas Palix. GPLv2.
|
||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options: -no_includes -include_headers
|
||||
|
||||
virtual patch
|
||||
virtual context
|
||||
virtual org
|
||||
virtual report
|
||||
|
||||
@gfp exists@
|
||||
identifier fn;
|
||||
@@ -32,28 +35,29 @@ fn(...) {
|
||||
... when any
|
||||
}
|
||||
|
||||
@locked@
|
||||
@locked exists@
|
||||
identifier gfp.fn;
|
||||
position p1,p2;
|
||||
@@
|
||||
|
||||
(
|
||||
read_lock_irq
|
||||
read_lock_irq@p1
|
||||
|
|
||||
write_lock_irq
|
||||
write_lock_irq@p1
|
||||
|
|
||||
read_lock_irqsave
|
||||
read_lock_irqsave@p1
|
||||
|
|
||||
write_lock_irqsave
|
||||
write_lock_irqsave@p1
|
||||
|
|
||||
spin_lock
|
||||
spin_lock@p1
|
||||
|
|
||||
spin_trylock
|
||||
spin_trylock@p1
|
||||
|
|
||||
spin_lock_irq
|
||||
spin_lock_irq@p1
|
||||
|
|
||||
spin_lock_irqsave
|
||||
spin_lock_irqsave@p1
|
||||
|
|
||||
local_irq_disable
|
||||
local_irq_disable@p1
|
||||
)
|
||||
(...)
|
||||
... when != read_unlock_irq(...)
|
||||
@@ -64,11 +68,38 @@ local_irq_disable
|
||||
when != spin_unlock_irq(...)
|
||||
when != spin_unlock_irqrestore(...)
|
||||
when != local_irq_enable(...)
|
||||
fn(...)
|
||||
fn@p2(...)
|
||||
|
||||
@depends on locked@
|
||||
@depends on locked && patch@
|
||||
position gfp.p;
|
||||
@@
|
||||
|
||||
- GFP_KERNEL@p
|
||||
+ GFP_ATOMIC
|
||||
|
||||
@depends on locked && !patch@
|
||||
position gfp.p;
|
||||
@@
|
||||
|
||||
* GFP_KERNEL@p
|
||||
|
||||
@script:python depends on !patch && org@
|
||||
p << gfp.p;
|
||||
fn << gfp.fn;
|
||||
p1 << locked.p1;
|
||||
p2 << locked.p2;
|
||||
@@
|
||||
|
||||
cocci.print_main("lock",p1)
|
||||
cocci.print_secs("call",p2)
|
||||
cocci.print_secs("GFP_KERNEL",p)
|
||||
|
||||
@script:python depends on !patch && report@
|
||||
p << gfp.p;
|
||||
fn << gfp.fn;
|
||||
p1 << locked.p1;
|
||||
p2 << locked.p2;
|
||||
@@
|
||||
|
||||
msg = "ERROR: function %s called on line %s inside lock on line %s but uses GFP_KERNEL" % (fn,p2[0].line,p1[0].line)
|
||||
coccilib.report.print_report(p[0], msg)
|
||||
|
Reference in New Issue
Block a user