 1f648f88ce
			
		
	
	
	1f648f88ce
	
	
	
		
			
			There are calls which silently set the owner of a module. This is the preferred way [1], so avoid setting it manually. Currently, we only care about platform drivers, but there might be more calls to be added later. [1] https://lkml.org/lkml/2014/10/12/87 Signed-off-by: Wolfram Sang <wsa@the-dreams.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
		
			
				
	
	
		
			106 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| /// Remove .owner field if calls are used which set it automatically
 | |
| ///
 | |
| // Confidence: High
 | |
| // Copyright: (C) 2014 Wolfram Sang. GPL v2.
 | |
| 
 | |
| virtual patch
 | |
| virtual context
 | |
| virtual org
 | |
| virtual report
 | |
| 
 | |
| @match1@
 | |
| declarer name module_platform_driver;
 | |
| declarer name module_platform_driver_probe;
 | |
| identifier __driver;
 | |
| @@
 | |
| (
 | |
| 	module_platform_driver(__driver);
 | |
| |
 | |
| 	module_platform_driver_probe(__driver, ...);
 | |
| )
 | |
| 
 | |
| @fix1 depends on match1 && patch && !context && !org && !report@
 | |
| identifier match1.__driver;
 | |
| @@
 | |
| 	static struct platform_driver __driver = {
 | |
| 		.driver = {
 | |
| -			.owner = THIS_MODULE,
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| @match2@
 | |
| identifier __driver;
 | |
| @@
 | |
| (
 | |
| 	platform_driver_register(&__driver)
 | |
| |
 | |
| 	platform_driver_probe(&__driver, ...)
 | |
| |
 | |
| 	platform_create_bundle(&__driver, ...)
 | |
| )
 | |
| 
 | |
| @fix2 depends on match2 && patch && !context && !org && !report@
 | |
| identifier match2.__driver;
 | |
| @@
 | |
| 	static struct platform_driver __driver = {
 | |
| 		.driver = {
 | |
| -			.owner = THIS_MODULE,
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| @fix1_context depends on match1 && !patch && (context || org || report)@
 | |
| identifier match1.__driver;
 | |
| position j0;
 | |
| @@
 | |
| 
 | |
|  	static struct platform_driver __driver = {
 | |
| 		.driver = {
 | |
| *			.owner@j0 = THIS_MODULE,
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| @fix2_context depends on match2 && !patch && (context || org || report)@
 | |
| identifier match2.__driver;
 | |
| position j0;
 | |
| @@
 | |
| 
 | |
|  	static struct platform_driver __driver = {
 | |
| 		.driver = {
 | |
| *			.owner@j0 = THIS_MODULE,
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| @script:python fix1_org depends on org@
 | |
| j0 << fix1_context.j0;
 | |
| @@
 | |
| 
 | |
| msg = "No need to set .owner here. The core will do it."
 | |
| coccilib.org.print_todo(j0[0], msg)
 | |
| 
 | |
| @script:python fix2_org depends on org@
 | |
| j0 << fix2_context.j0;
 | |
| @@
 | |
| 
 | |
| msg = "No need to set .owner here. The core will do it."
 | |
| coccilib.org.print_todo(j0[0], msg)
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| @script:python fix1_report depends on report@
 | |
| j0 << fix1_context.j0;
 | |
| @@
 | |
| 
 | |
| msg = "No need to set .owner here. The core will do it."
 | |
| coccilib.report.print_report(j0[0], msg)
 | |
| 
 | |
| @script:python fix2_report depends on report@
 | |
| j0 << fix2_context.j0;
 | |
| @@
 | |
| 
 | |
| msg = "No need to set .owner here. The core will do it."
 | |
| coccilib.report.print_report(j0[0], msg)
 | |
| 
 |