Blame view

scripts/coccinelle/locks/flags.cocci 1.53 KB
10247179a   Julia Lawall   Coccinelle: Find ...
1
2
3
  /// Find nested lock+irqsave functions that use the same flags variables
  ///
  // Confidence: High
29a36d4de   Julia Lawall   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   Julia Lawall   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   Julia Lawall   scripts/coccinell...
14
  @r exists@
10247179a   Julia Lawall   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   Julia Lawall   scripts/coccinell...
40
  @d exists@
10247179a   Julia Lawall   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   Julia Lawall   scripts/coccinell...
76
  msg="ERROR: nested lock+irqsave that reuses flags from line %s." % (p1[0].line)
10247179a   Julia Lawall   Coccinelle: Find ...
77
  coccilib.report.print_report(p2[0], msg)