Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /// Find nested lock+irqsave functions that use the same flags variables
0003 ///
0004 // Confidence: High
0005 // Copyright: (C) 2010-2012 Nicolas Palix.
0006 // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
0007 // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
0008 // URL: https://coccinelle.gitlabpages.inria.fr/website
0009 // Comments:
0010 // Options: --no-includes --include-headers
0011 
0012 virtual context
0013 virtual org
0014 virtual report
0015 
0016 @r exists@
0017 expression lock1,lock2,flags;
0018 position p1,p2;
0019 @@
0020 
0021 (
0022 spin_lock_irqsave@p1(lock1,flags)
0023 |
0024 read_lock_irqsave@p1(lock1,flags)
0025 |
0026 write_lock_irqsave@p1(lock1,flags)
0027 )
0028 ... when != flags
0029 (
0030 spin_lock_irqsave(lock1,flags)
0031 |
0032 read_lock_irqsave(lock1,flags)
0033 |
0034 write_lock_irqsave(lock1,flags)
0035 |
0036 spin_lock_irqsave@p2(lock2,flags)
0037 |
0038 read_lock_irqsave@p2(lock2,flags)
0039 |
0040 write_lock_irqsave@p2(lock2,flags)
0041 )
0042 
0043 @d exists@
0044 expression f <= r.flags;
0045 expression lock1,lock2,flags;
0046 position r.p1, r.p2;
0047 @@
0048 
0049 (
0050 *spin_lock_irqsave@p1(lock1,flags)
0051 |
0052 *read_lock_irqsave@p1(lock1,flags)
0053 |
0054 *write_lock_irqsave@p1(lock1,flags)
0055 )
0056 ... when != f
0057 (
0058 *spin_lock_irqsave@p2(lock2,flags)
0059 |
0060 *read_lock_irqsave@p2(lock2,flags)
0061 |
0062 *write_lock_irqsave@p2(lock2,flags)
0063 )
0064 
0065 // ----------------------------------------------------------------------
0066 
0067 @script:python depends on d && org@
0068 p1 << r.p1;
0069 p2 << r.p2;
0070 @@
0071 
0072 cocci.print_main("original lock",p1)
0073 cocci.print_secs("nested lock+irqsave that reuses flags",p2)
0074 
0075 @script:python depends on d && report@
0076 p1 << r.p1;
0077 p2 << r.p2;
0078 @@
0079 
0080 msg="ERROR: nested lock+irqsave that reuses flags from line %s." % (p1[0].line)
0081 coccilib.report.print_report(p2[0], msg)