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)
|
||||
|
@@ -1,9 +1,9 @@
|
||||
/// Find nested lock+irqsave functions that use the same flags variables
|
||||
///
|
||||
// Confidence: High
|
||||
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
|
||||
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2.
|
||||
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// 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.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options: -no_includes -include_headers
|
||||
@@ -12,7 +12,7 @@ virtual context
|
||||
virtual org
|
||||
virtual report
|
||||
|
||||
@r@
|
||||
@r exists@
|
||||
expression lock1,lock2,flags;
|
||||
position p1,p2;
|
||||
@@
|
||||
@@ -39,7 +39,7 @@ read_lock_irqsave@p2(lock2,flags)
|
||||
write_lock_irqsave@p2(lock2,flags)
|
||||
)
|
||||
|
||||
@d@
|
||||
@d exists@
|
||||
expression f <= r.flags;
|
||||
expression lock1,lock2,flags;
|
||||
position r.p1, r.p2;
|
||||
@@ -76,5 +76,5 @@ p1 << r.p1;
|
||||
p2 << r.p2;
|
||||
@@
|
||||
|
||||
msg="ERROR: nested lock+irqsave that reuses flags from %s." % (p1[0].line)
|
||||
msg="ERROR: nested lock+irqsave that reuses flags from line %s." % (p1[0].line)
|
||||
coccilib.report.print_report(p2[0], msg)
|
||||
|
@@ -6,13 +6,14 @@
|
||||
/// function call that releases the lock.
|
||||
///
|
||||
// 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) 2010-2012 Nicolas Palix. GPLv2.
|
||||
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options: -no_includes -include_headers
|
||||
|
||||
virtual context
|
||||
virtual org
|
||||
virtual report
|
||||
|
||||
@@ -57,7 +58,7 @@ position r;
|
||||
|
||||
for(...;...;...) { <+... return@r ...; ...+> }
|
||||
|
||||
@err@
|
||||
@err exists@
|
||||
expression E1;
|
||||
position prelocked.p;
|
||||
position up != prelocked.p1;
|
||||
@@ -65,14 +66,14 @@ position r!=looped.r;
|
||||
identifier lock,unlock;
|
||||
@@
|
||||
|
||||
lock(E1@p,...);
|
||||
*lock(E1@p,...);
|
||||
<+... when != E1
|
||||
if (...) {
|
||||
... when != E1
|
||||
return@r ...;
|
||||
* return@r ...;
|
||||
}
|
||||
...+>
|
||||
unlock@up(E1,...);
|
||||
*unlock@up(E1,...);
|
||||
|
||||
@script:python depends on org@
|
||||
p << prelocked.p1;
|
||||
|
Reference in New Issue
Block a user