mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	coccinelle: Add script to check for platform_get_irq() excessive prints
Add a coccinelle script to check for the usage of dev_err() after a call
to platform_get_irq{,_byname}() as it's redundant now that the function
already prints an error when it fails.
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Rob Herring <robh@kernel.org>
Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Cc: Javier Martinez Canillas <javierm@redhat.com>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Russell King - ARM Linux <linux@armlinux.org.uk>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Markus Elfring <Markus.Elfring@web.de>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
Link: https://lore.kernel.org/r/20190730053845.126834-4-swboyd@chromium.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
			
			
This commit is contained in:
		
							parent
							
								
									7723f4c5ec
								
							
						
					
					
						commit
						98051ba2b2
					
				
					 1 changed files with 102 additions and 0 deletions
				
			
		
							
								
								
									
										102
									
								
								scripts/coccinelle/api/platform_get_irq.cocci
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								scripts/coccinelle/api/platform_get_irq.cocci
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,102 @@
 | 
				
			||||||
 | 
					// SPDX-License-Identifier: GPL-2.0
 | 
				
			||||||
 | 
					/// Remove dev_err() messages after platform_get_irq*() failures
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Confidence: Medium
 | 
				
			||||||
 | 
					// Options: --include-headers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					virtual patch
 | 
				
			||||||
 | 
					virtual context
 | 
				
			||||||
 | 
					virtual org
 | 
				
			||||||
 | 
					virtual report
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@depends on context@
 | 
				
			||||||
 | 
					expression ret;
 | 
				
			||||||
 | 
					struct platform_device *E;
 | 
				
			||||||
 | 
					@@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ret =
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					platform_get_irq
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					platform_get_irq_byname
 | 
				
			||||||
 | 
					)(E, ...);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ( ret \( < \| <= \) 0 )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					if (ret != -EPROBE_DEFER)
 | 
				
			||||||
 | 
					{ ...
 | 
				
			||||||
 | 
					*dev_err(...);
 | 
				
			||||||
 | 
					... }
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					*dev_err(...);
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@depends on patch@
 | 
				
			||||||
 | 
					expression ret;
 | 
				
			||||||
 | 
					struct platform_device *E;
 | 
				
			||||||
 | 
					@@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ret =
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					platform_get_irq
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					platform_get_irq_byname
 | 
				
			||||||
 | 
					)(E, ...);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ( ret \( < \| <= \) 0 )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					-if (ret != -EPROBE_DEFER)
 | 
				
			||||||
 | 
					-{ ...
 | 
				
			||||||
 | 
					-dev_err(...);
 | 
				
			||||||
 | 
					-... }
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					-dev_err(...);
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@r depends on org || report@
 | 
				
			||||||
 | 
					position p1;
 | 
				
			||||||
 | 
					expression ret;
 | 
				
			||||||
 | 
					struct platform_device *E;
 | 
				
			||||||
 | 
					@@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ret =
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					platform_get_irq
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					platform_get_irq_byname
 | 
				
			||||||
 | 
					)(E, ...);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ( ret \( < \| <= \) 0 )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					if (ret != -EPROBE_DEFER)
 | 
				
			||||||
 | 
					{ ...
 | 
				
			||||||
 | 
					dev_err@p1(...);
 | 
				
			||||||
 | 
					... }
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					dev_err@p1(...);
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@script:python depends on org@
 | 
				
			||||||
 | 
					p1 << r.p1;
 | 
				
			||||||
 | 
					@@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cocci.print_main(p1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@script:python depends on report@
 | 
				
			||||||
 | 
					p1 << r.p1;
 | 
				
			||||||
 | 
					@@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg = "line %s is redundant because platform_get_irq() already prints an error" % (p1[0].line)
 | 
				
			||||||
 | 
					coccilib.report.print_report(p1[0],msg)
 | 
				
			||||||
		Loading…
	
		Reference in a new issue