 e105007c12
			
		
	
	
	e105007c12
	
	
	
		
			
			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. Signed-off-by: Nicolas Palix <npalix@diku.dk> Signed-off-by: Julia Lawall <julia@diku.dk> Signed-off-by: Michal Marek <mmarek@suse.cz>
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			1.5 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			1.5 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| /// 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.
 | |
| ///
 | |
| // Confidence: Moderate
 | |
| // Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2.
 | |
| // Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2.
 | |
| // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
 | |
| // URL: http://coccinelle.lip6.fr/
 | |
| // Comments:
 | |
| // Options: -no_includes -include_headers
 | |
| 
 | |
| virtual patch
 | |
| 
 | |
| @gfp exists@
 | |
| identifier fn;
 | |
| position p;
 | |
| @@
 | |
| 
 | |
| fn(...) {
 | |
|  ... when != read_unlock_irq(...)
 | |
|      when != write_unlock_irq(...)
 | |
|      when != read_unlock_irqrestore(...)
 | |
|      when != write_unlock_irqrestore(...)
 | |
|      when != spin_unlock(...)
 | |
|      when != spin_unlock_irq(...)
 | |
|      when != spin_unlock_irqrestore(...)
 | |
|      when != local_irq_enable(...)
 | |
|      when any
 | |
|  GFP_KERNEL@p
 | |
|  ... when any
 | |
| }
 | |
| 
 | |
| @locked@
 | |
| identifier gfp.fn;
 | |
| @@
 | |
| 
 | |
| (
 | |
| read_lock_irq
 | |
| |
 | |
| write_lock_irq
 | |
| |
 | |
| read_lock_irqsave
 | |
| |
 | |
| write_lock_irqsave
 | |
| |
 | |
| spin_lock
 | |
| |
 | |
| spin_trylock
 | |
| |
 | |
| spin_lock_irq
 | |
| |
 | |
| spin_lock_irqsave
 | |
| |
 | |
| local_irq_disable
 | |
| )
 | |
|  (...)
 | |
| ...  when != read_unlock_irq(...)
 | |
|      when != write_unlock_irq(...)
 | |
|      when != read_unlock_irqrestore(...)
 | |
|      when != write_unlock_irqrestore(...)
 | |
|      when != spin_unlock(...)
 | |
|      when != spin_unlock_irq(...)
 | |
|      when != spin_unlock_irqrestore(...)
 | |
|      when != local_irq_enable(...)
 | |
| fn(...)
 | |
| 
 | |
| @depends on locked@
 | |
| position gfp.p;
 | |
| @@
 | |
| 
 | |
| - GFP_KERNEL@p
 | |
| + GFP_ATOMIC
 |