mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 08:38:45 +02:00 
			
		
		
		
	scripts/misc-check: check missing #include <linux/export.h> when W=1
The problem was described in commit 5b20755b77 ("init: move THIS_MODULE
from <linux/export.h> to <linux/init.h>").
To summarize it again here: <linux/export.h> is included by most C files,
even though only some of them actually export symbols. This is because
some headers, such as include/linux/{module.h,linkage}, needlessly
include <linux/export.h>.
I have added a more detailed explanation in the comments of
scripts/misc-check.
This problem will be fixed in two steps:
 1. Add #include <linux/export.h> directly to C files that use
    EXPORT_SYMBOL()
 2. Remove #include <linux/export.h> from header files that do not use
    EXPORT_SYMBOL()
This commit addresses step 1; scripts/misc-check will warn about *.[ch]
files that use EXPORT_SYMBOL() but do not include <linux/export.h>.
This check is only triggered when the kernel is built with W=1.
We need to fix 4000+ files. I hope others will help with this effort.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									3a44052b72
								
							
						
					
					
						commit
						a934a57a42
					
				
					 1 changed files with 43 additions and 0 deletions
				
			
		|  | @ -9,4 +9,47 @@ check_tracked_ignored_files () { | |||
| 		sed 's/$/: warning: ignored by one of the .gitignore files/' >&2 | ||||
| } | ||||
| 
 | ||||
| # Check for missing #include <linux/export.h> | ||||
| # | ||||
| # The rule for including <linux/export.h> is very simple: | ||||
| # Include <linux/export.h> only when you use EXPORT_SYMBOL(). That's it. | ||||
| # | ||||
| # However, some headers include <linux/export.h> even though they are completely | ||||
| # unrelated to EXPORT_SYMBOL(). | ||||
| # | ||||
| # One example is include/linux/module.h. Please note <linux/module.h> and | ||||
| # <linux/export.h> are orthogonal. <linux/module.h> should be included by files | ||||
| # that can be compiled as modules. In other words, <linux/module.h> should be | ||||
| # included by EXPORT_SYMBOL consumers. In contrast, <linux/export.h> should be | ||||
| # included from EXPORT_SYMBOL providers, which may or may not be modular. | ||||
| # Hence, include/linux/module.h should *not* include <linux/export.h>. | ||||
| # | ||||
| # Another example is include/linux/linkage.h, which is completely unrelated to | ||||
| # EXPORT_SYMBOL(). Worse, it is included by most C files, which means, most C | ||||
| # files end up including <linux/export.h>, even though only some of them | ||||
| # actually export symbols. Hence, include/linux/linkage.h should *not* include | ||||
| # <linux/export.h>. | ||||
| # | ||||
| # Before fixing such headers, we must ensure that C files using EXPORT_SYMBOL() | ||||
| # include <linux/export.h> directly, since many C files currently rely on | ||||
| # <linux/export.h> being included indirectly (likely, via <linux/linkage> etc.). | ||||
| # | ||||
| # Therefore, this check. | ||||
| # | ||||
| # The problem is simple - the warned files use EXPORT_SYMBOL(), but do not | ||||
| # include <linux/export.h>. Please add #include <linux/export.h> to them. | ||||
| # | ||||
| # If the included headers are sorted alphabetically, please insert | ||||
| # <linux/export.h> in the appropriate position to maintain the sort order. | ||||
| # For this reason, this script only checks missing <linux/export.h>, but | ||||
| # does not automatically fix it. | ||||
| check_missing_include_linux_export_h () { | ||||
| 
 | ||||
| 	git -C "${srctree:-.}" grep --files-with-matches -E 'EXPORT_SYMBOL((_NS)?(_GPL)?|_GPL_FOR_MODULES)\(.*\)' \ | ||||
| 	    -- '*.[ch]' :^tools/ :^include/linux/export.h | | ||||
| 	xargs -r git -C "${srctree:-.}" grep --files-without-match '#include[[:space:]]*<linux/export\.h>' | | ||||
| 	xargs -r printf "%s: warning: EXPORT_SYMBOL() is used, but #include <linux/export.h> is missing\n" >&2 | ||||
| } | ||||
| 
 | ||||
| check_tracked_ignored_files | ||||
| check_missing_include_linux_export_h | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Masahiro Yamada
						Masahiro Yamada