pinctrl: remove include file from <linux/device.h>
When pulling the recent pinctrl merge, I was surprised by how a
pinctrl-only pull request ended up rebuilding basically the whole
kernel.
The reason for that ended up being that <linux/device.h> included
<linux/pinctrl/devinfo.h>, so any change to that file ended up causing
pretty much every driver out there to be rebuilt.
The reason for that was because 'struct device' has this in it:
    #ifdef CONFIG_PINCTRL
        struct dev_pin_info     *pins;
    #endif
but we already avoid header includes for these kinds of things in that
header file, preferring to just use a forward-declaration of the
structure instead.  Exactly to avoid this kind of header dependency.
Since some drivers seem to expect that <linux/pinctrl/devinfo.h> header
to come in automatically, move the include to <linux/pinctrl/pinctrl.h>
instead.  It might be better to just make the includes more targeted,
but I'm not going to review every driver.
It would definitely be good to have a tool for finding and minimizing
header dependencies automatically - or at least help with them.  Right
now we almost certainly end up having way too many of these things, and
it's hard to test every single configuration.
FWIW, you can get a sense of the "hotness" of a header file with something
like this after doing a full build:
    find . -name '.*.o.cmd' -print0 |
        xargs -0 tail --lines=+2 |
        grep -v 'wildcard ' |
        tr ' \\' '\n' |
        sort | uniq -c | sort -n | less -S
which isn't exact (there are other things in those '*.o.cmd' than just
the dependencies, and the "--lines=+2" only removes the header), but
might a useful approximation.
With this patch, <linux/pinctrl/devinfo.h> drops to "only" having 833
users in the current x86-64 allmodconfig.  In contrast, <linux/device.h>
has 14857 build files including it directly or indirectly.
Of course, the headers that absolutely _everybody_ includes (things like
<linux/types.h> etc) get a score of 23000+.
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
			
			
This commit is contained in:
		
							parent
							
								
									d3581c8ef7
								
							
						
					
					
						commit
						23c35f48f5
					
				| @ -20,7 +20,6 @@ | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/mutex.h> | ||||
| #include <linux/pinctrl/devinfo.h> | ||||
| #include <linux/pm.h> | ||||
| #include <linux/atomic.h> | ||||
| #include <linux/ratelimit.h> | ||||
| @ -41,6 +40,7 @@ struct fwnode_handle; | ||||
| struct iommu_ops; | ||||
| struct iommu_group; | ||||
| struct iommu_fwspec; | ||||
| struct dev_pin_info; | ||||
| 
 | ||||
| struct bus_attribute { | ||||
| 	struct attribute	attr; | ||||
|  | ||||
| @ -18,6 +18,7 @@ | ||||
| #include <linux/list.h> | ||||
| #include <linux/seq_file.h> | ||||
| #include <linux/pinctrl/pinctrl-state.h> | ||||
| #include <linux/pinctrl/devinfo.h> | ||||
| 
 | ||||
| struct device; | ||||
| struct pinctrl_dev; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user