# git rev-parse -q --verify 23c35f48f5fbe33f68904138b23fee64df7d2f0f^{commit} 23c35f48f5fbe33f68904138b23fee64df7d2f0f already have revision, skipping fetch # git checkout -q -f -B kisskb 23c35f48f5fbe33f68904138b23fee64df7d2f0f # git clean -qxdf # git log -1 commit 23c35f48f5fbe33f68904138b23fee64df7d2f0f Author: Linus Torvalds Date: Fri Feb 2 16:44:14 2018 -0800 pinctrl: remove include file from 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 included , 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 header to come in automatically, move the include to 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, drops to "only" having 833 users in the current x86-64 allmodconfig. In contrast, has 14857 build files including it directly or indirectly. Of course, the headers that absolutely _everybody_ includes (things like etc) get a score of 23000+. Cc: Linus Walleij Cc: Greg Kroah-Hartman Signed-off-by: Linus Torvalds # < /opt/cross/kisskb/br-sparc64-full-2016.08-613-ge98b4dd/bin/sparc64-linux-gcc --version # < git log --format=%s --max-count=1 23c35f48f5fbe33f68904138b23fee64df7d2f0f # < make -j 120 ARCH=sparc O=/home/kisskb/slave/build/linus_sparc-allnoconfig_sparc64 CROSS_COMPILE=/opt/cross/kisskb/br-sparc64-full-2016.08-613-ge98b4dd/bin/sparc64-linux- allnoconfig # make -j 120 ARCH=sparc O=/home/kisskb/slave/build/linus_sparc-allnoconfig_sparc64 CROSS_COMPILE=/opt/cross/kisskb/br-sparc64-full-2016.08-613-ge98b4dd/bin/sparc64-linux- make[1]: Entering directory '/home/kisskb/slave/build/linus_sparc-allnoconfig_sparc64' GEN ./Makefile scripts/kconfig/conf --silentoldconfig Kconfig CHK include/config/kernel.release GEN ./Makefile WRAP arch/sparc/include/generated/uapi/asm/types.h WRAP arch/sparc/include/generated/uapi/asm/bpf_perf_event.h UPD include/config/kernel.release CHK include/generated/uapi/linux/version.h UPD include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h UPD include/generated/utsrelease.h Using /home/kisskb/slave/src as source for kernel WRAP arch/sparc/include/generated/asm/div64.h WRAP arch/sparc/include/generated/asm/emergency-restart.h WRAP arch/sparc/include/generated/asm/exec.h WRAP arch/sparc/include/generated/asm/export.h WRAP arch/sparc/include/generated/asm/irq_regs.h WRAP arch/sparc/include/generated/asm/irq_work.h WRAP arch/sparc/include/generated/asm/linkage.h WRAP arch/sparc/include/generated/asm/local.h WRAP arch/sparc/include/generated/asm/local64.h WRAP arch/sparc/include/generated/asm/mcs_spinlock.h WRAP arch/sparc/include/generated/asm/mm-arch-hooks.h WRAP arch/sparc/include/generated/asm/module.h WRAP arch/sparc/include/generated/asm/rwsem.h WRAP arch/sparc/include/generated/asm/preempt.h WRAP arch/sparc/include/generated/asm/serial.h WRAP arch/sparc/include/generated/asm/trace_clock.h WRAP arch/sparc/include/generated/asm/word-at-a-time.h CC scripts/mod/empty.o HOSTCC scripts/mod/mk_elfconfig CC scripts/mod/devicetable-offsets.s CHK scripts/mod/devicetable-offsets.h UPD scripts/mod/devicetable-offsets.h MKELF scripts/mod/elfconfig.h HOSTCC scripts/mod/modpost.o HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/sumversion.o HOSTLD scripts/mod/modpost CC kernel/bounds.s CHK include/generated/timeconst.h UPD include/generated/timeconst.h CHK include/generated/bounds.h UPD include/generated/bounds.h CC arch/sparc/kernel/asm-offsets.s CHK include/generated/asm-offsets.h UPD include/generated/asm-offsets.h CALL /home/kisskb/slave/src/scripts/checksyscalls.sh CHK include/generated/compile.h CC init/main.o CC init/do_mounts.o CC init/noinitramfs.o CC init/calibrate.o CC init/init_task.o AR usr/built-in.o AR arch/sparc/net/built-in.o AR arch/sparc/crypto/built-in.o CC kernel/fork.o CC kernel/exec_domain.o CC kernel/panic.o CC arch/sparc/math-emu/math_32.o CC arch/sparc/mm/fault_32.o AS arch/sparc/kernel/entry.o AS arch/sparc/kernel/wof.o AS arch/sparc/kernel/wuf.o CC kernel/cpu.o CC arch/sparc/mm/init_32.o CC kernel/exit.o AS arch/sparc/kernel/etrap_32.o CC kernel/softirq.o CC kernel/resource.o UPD include/generated/compile.h CC kernel/sysctl.o AS arch/sparc/kernel/rtrap_32.o CC arch/sparc/mm/iommu.o CC arch/sparc/mm/extable.o CC kernel/sysctl_binary.o CC arch/sparc/mm/srmmu.o CC arch/sparc/mm/io-unit.o CC kernel/capability.o AS arch/sparc/mm/srmmu_access.o CC arch/sparc/kernel/sun4m_irq.o CC arch/sparc/kernel/traps_32.o AS arch/sparc/mm/hypersparc.o CC kernel/ptrace.o AS arch/sparc/mm/viking.o CC arch/sparc/kernel/sun4d_irq.o CC arch/sparc/kernel/irq_32.o AR certs/built-in.o CC kernel/user.o AS arch/sparc/mm/tsunami.o CC kernel/signal.o CC kernel/sys.o CC init/version.o CC kernel/umh.o CC arch/sparc/kernel/signal_32.o CC arch/sparc/mm/leon_mm.o CC arch/sparc/kernel/process_32.o AS arch/sparc/mm/swift.o CC kernel/workqueue.o CC arch/sparc/kernel/sigutil_32.o CC kernel/pid.o CC arch/sparc/mm/highmem.o CC arch/sparc/kernel/ioport.o CC kernel/task_work.o CC kernel/extable.o CC arch/sparc/kernel/setup_32.o CC kernel/params.o CC arch/sparc/kernel/idprom.o CC arch/sparc/kernel/sys_sparc_32.o CC mm/filemap.o CC kernel/kthread.o AS arch/sparc/kernel/systbls_32.o CC kernel/sys_ni.o CC arch/sparc/kernel/time_32.o CC kernel/notifier.o CC mm/mempool.o CC kernel/ksysfs.o CC arch/sparc/kernel/windows.o CC kernel/cred.o CC mm/oom_kill.o CC kernel/reboot.o CC arch/sparc/kernel/devices.o CC kernel/range.o CC mm/maccess.o CC kernel/nsproxy.o AS arch/sparc/kernel/una_asm_32.o CC arch/sparc/kernel/prom_common.o CC arch/sparc/kernel/unaligned_32.o CC mm/page-writeback.o CC kernel/dma.o CC arch/sparc/kernel/cpu.o CC arch/sparc/kernel/of_device_common.o CC kernel/async.o CC mm/readahead.o CC kernel/irq/resend.o CC kernel/smpboot.o CC arch/sparc/kernel/ptrace_32.o CC arch/sparc/kernel/of_device_32.o CC kernel/ucount.o CC kernel/sched/core.o CC mm/page_alloc.o AR kernel/livepatch/built-in.o CC kernel/irq/chip.o CC kernel/up.o CC arch/sparc/kernel/leon_pmc.o CC mm/shmem.o LDS arch/sparc/kernel/vmlinux.lds CC kernel/irq/dummychip.o CC kernel/power/qos.o AS arch/sparc/kernel/head_32.o CC kernel/memremap.o CC kernel/locking/mutex.o CC kernel/irq/devres.o CC kernel/irq/irqdesc.o CC arch/sparc/kernel/dma.o CC arch/sparc/kernel/prom_32.o CC kernel/irq/handle.o CC fs/open.o CC arch/sparc/kernel/auxio_32.o CC mm/swap.o CC kernel/irq/manage.o CC fs/read_write.o CC arch/sparc/kernel/apc.o CC arch/sparc/kernel/leon_kernel.o CC arch/sparc/kernel/pmc.o CC kernel/irq/spurious.o CC mm/truncate.o CC kernel/printk/printk.o AR ipc/built-in.o CC fs/file_table.o CC kernel/rcu/sync.o CC kernel/time/timer.o CC kernel/rcu/update.o CC mm/vmscan.o CC mm/util.o CC kernel/sched/loadavg.o CC kernel/rcu/tiny.o CC kernel/time/time.o CC kernel/locking/semaphore.o CC kernel/sched/clock.o CC kernel/sched/idle_task.o CC kernel/sched/cputime.o CC kernel/sched/fair.o CC security/commoncap.o CC kernel/time/hrtimer.o CC kernel/time/timekeeping.o CC fs/super.o CC fs/char_dev.o CC kernel/locking/rwsem.o CC kernel/locking/percpu-rwsem.o CC fs/stat.o CC kernel/locking/rwsem-spinlock.o CC fs/exec.o CC kernel/sched/deadline.o CC kernel/sched/rt.o CC fs/namei.o CC fs/pipe.o AR block/built-in.o CC mm/mmzone.o CC mm/vmstat.o CC mm/backing-dev.o CC kernel/time/ntp.o CC kernel/time/clocksource.o CC fs/fcntl.o CC kernel/time/jiffies.o CC fs/ioctl.o CC kernel/time/timer_list.o CC fs/readdir.o CC kernel/time/timeconv.o CC fs/select.o AR crypto/built-in.o CC mm/percpu.o CC fs/inode.o CC fs/dcache.o CC mm/mmu_context.o CC mm/mm_init.o CC fs/attr.o CC kernel/sched/wait.o CC kernel/sched/wait_bit.o CC mm/slab_common.o CC fs/bad_inode.o CC kernel/sched/swait.o CC mm/compaction.o AR drivers/amba/built-in.o CC kernel/sched/completion.o CC kernel/sched/idle.o AR sound/built-in.o CC fs/file.o CC mm/interval_tree.o CC mm/vmacache.o CC mm/swap_slots.o CC fs/filesystems.o CC fs/xattr.o CC fs/namespace.o CC fs/seq_file.o CC mm/list_lru.o CC drivers/base/component.o CC fs/libfs.o CC mm/workingset.o AR drivers/cdrom/built-in.o AR drivers/auxdisplay/built-in.o AR drivers/block/built-in.o AR drivers/bus/built-in.o CC mm/gup.o CC drivers/char/mem.o CC mm/highmem.o CC mm/debug.o CC security/min_addr.o AR drivers/clk/bcm/built-in.o AR drivers/char/ipmi/built-in.o AR kernel/rcu/built-in.o AR drivers/clk/imgtec/built-in.o AR firmware/built-in.o CC drivers/char/random.o AR drivers/i2c/busses/built-in.o AR drivers/idle/built-in.o CC drivers/char/misc.o AR drivers/irqchip/built-in.o AR drivers/clocksource/built-in.o AR drivers/clk/renesas/built-in.o AR drivers/clk/mvebu/built-in.o CC fs/fs-writeback.o AR drivers/i2c/algos/built-in.o AR drivers/i2c/muxes/built-in.o AR drivers/clk/mediatek/built-in.o AR drivers/hwtracing/intel_th/built-in.o AR drivers/char/agp/built-in.o AR drivers/firewire/built-in.o AR drivers/mfd/built-in.o AR drivers/macintosh/built-in.o AR net/built-in.o CC drivers/base/core.o CC kernel/time/alarmtimer.o CC kernel/time/posix-stubs.o CC kernel/time/timecounter.o AR drivers/clk/ti/built-in.o CC drivers/base/bus.o AR kernel/locking/built-in.o CC mm/memory.o AR drivers/media/i2c/soc_camera/built-in.o AR drivers/media/firewire/built-in.o AR drivers/i2c/built-in.o AR drivers/nvme/host/built-in.o AR drivers/clk/built-in.o CC fs/pnode.o AR drivers/mmc/built-in.o AR drivers/net/phy/built-in.o AR drivers/media/i2c/built-in.o AR drivers/pci/dwc/built-in.o AR drivers/nfc/built-in.o AR drivers/misc/cb710/built-in.o AR kernel/power/built-in.o AR drivers/nvme/target/built-in.o CC kernel/time/clockevents.o CC mm/mincore.o AR drivers/gpu/drm/amd/lib/built-in.o CC drivers/base/dd.o AR drivers/media/mmc/siano/built-in.o CC fs/splice.o CC drivers/of/base.o AR drivers/net/built-in.o AR drivers/gpu/drm/bridge/synopsys/built-in.o AR arch/sparc/kernel/built-in.o AR drivers/media/common/b2c2/built-in.o CC kernel/time/tick-common.o AR drivers/power/built-in.o AR drivers/gpu/drm/hisilicon/built-in.o AR drivers/gpu/drm/bridge/built-in.o CC fs/utimes.o CC fs/sync.o AR drivers/media/common/saa7146/built-in.o AR drivers/media/rc/keymaps/built-in.o AR init/mounts.o AR drivers/nvme/built-in.o AR drivers/media/mmc/built-in.o AR drivers/platform/built-in.o AR drivers/gpu/drm/i2c/built-in.o AR drivers/pwm/built-in.o AR drivers/ptp/built-in.o AR drivers/media/pci/b2c2/built-in.o CC mm/mprotect.o CC mm/mlock.o CC mm/mremap.o CC mm/mmap.o AR drivers/media/platform/blackfin/built-in.o AR drivers/gpu/vga/built-in.o AR drivers/media/common/siano/built-in.o AR drivers/misc/eeprom/built-in.o CC mm/msync.o AR drivers/firmware/broadcom/built-in.o CC drivers/rtc/rtc-lib.o AR drivers/gpu/drm/omapdrm/displays/built-in.o AR drivers/media/rc/built-in.o CC fs/stack.o AR drivers/gpu/drm/omapdrm/dss/built-in.o AR drivers/firmware/meson/built-in.o AR drivers/media/platform/davinci/built-in.o CC fs/fs_struct.o AR drivers/media/spi/built-in.o CC lib/lockref.o AR drivers/gpu/drm/omapdrm/built-in.o AR drivers/gpu/drm/panel/built-in.o CC mm/page_vma_mapped.o AR init/built-in.o AR drivers/tty/ipwireless/built-in.o AR drivers/sbus/char/built-in.o CC lib/bcd.o AR kernel/printk/built-in.o AR drivers/media/common/v4l2-tpg/built-in.o CC drivers/rtc/systohc.o AR drivers/soc/bcm/built-in.o AR drivers/media/platform/meson/built-in.o CC drivers/base/syscore.o AR drivers/firmware/tegra/built-in.o CC mm/pagewalk.o CC mm/pgtable-generic.o AR drivers/gpu/drm/tilcdc/built-in.o CC fs/statfs.o AR drivers/media/pci/ddbridge/built-in.o AR drivers/media/tuners/built-in.o AR drivers/media/pci/mantis/built-in.o AR drivers/media/pci/dm1105/built-in.o AR drivers/video/backlight/built-in.o AR drivers/usb/built-in.o AR drivers/media/platform/omap/built-in.o CC lib/div64.o CC mm/rmap.o AR drivers/video/fbdev/core/built-in.o CC lib/sort.o AR arch/sparc/mm/built-in.o AR drivers/tty/serial/built-in.o AR drivers/tty/vt/built-in.o CC drivers/rtc/class.o CC fs/fs_pin.o CC mm/vmalloc.o AR drivers/sbus/built-in.o AR drivers/media/platform/stm32/built-in.o CC mm/init-mm.o AR drivers/misc/lis3lv02d/built-in.o AR drivers/media/common/built-in.o AR drivers/media/pci/ngene/built-in.o CC lib/parser.o CC arch/sparc/prom/bootstr_32.o AR drivers/media/usb/b2c2/built-in.o AR drivers/media/pci/netup_unidvb/built-in.o AR drivers/video/fbdev/omap2/omapfb/displays/built-in.o AR drivers/gpu/drm/built-in.o AR drivers/media/pci/pt3/built-in.o CC mm/bootmem.o AR drivers/media/pci/pluto2/built-in.o CC drivers/rtc/interface.o AR drivers/soc/fsl/built-in.o CC mm/dmapool.o AR drivers/soc/mediatek/built-in.o AR drivers/tty/built-in.o CC lib/debug_locks.o AR drivers/firmware/built-in.o CC fs/no-block.o AR drivers/media/pci/pt1/built-in.o AR drivers/media/pci/saa7146/built-in.o CC fs/nsfs.o AR drivers/media/platform/built-in.o AR drivers/soc/renesas/built-in.o CC mm/slub.o CC drivers/base/driver.o AR drivers/media/usb/dvb-usb/built-in.o AR fs/devpts/built-in.o AR drivers/media/usb/dvb-usb-v2/built-in.o CC arch/sparc/prom/console_32.o AR drivers/soc/xilinx/built-in.o CC arch/sparc/prom/init_32.o AR drivers/media/pci/smipcie/built-in.o AR kernel/irq/built-in.o AR fs/quota/built-in.o CC lib/random32.o AR drivers/media/pci/ttpci/built-in.o CC fs/ramfs/inode.o CC arch/sparc/prom/memory.o CC arch/sparc/prom/misc_32.o AR fs/exofs/built-in.o AR drivers/video/fbdev/omap2/omapfb/dss/built-in.o AR fs/notify/dnotify/built-in.o CC drivers/base/class.o CC arch/sparc/prom/mp.o AR drivers/video/fbdev/omap2/omapfb/built-in.o AR drivers/soc/built-in.o CC fs/ramfs/file-mmu.o CC drivers/base/platform.o AR drivers/gpu/built-in.o AR drivers/media/usb/s2255/built-in.o AR fs/notify/inotify/built-in.o CC lib/bust_spinlocks.o CC drivers/of/platform.o AR drivers/media/usb/siano/built-in.o AR fs/notify/fanotify/built-in.o CC lib/kasprintf.o CC drivers/of/device.o CC drivers/of/property.o AR drivers/media/usb/stkwebcam/built-in.o AR drivers/misc/mic/bus/built-in.o AR security/built-in.o AR drivers/misc/mic/built-in.o CC drivers/rtc/rtc-m48t59.o AR drivers/video/fbdev/omap2/built-in.o CC drivers/base/cpu.o AR drivers/media/pci/built-in.o CC drivers/base/firmware.o CC arch/sparc/lib/ucmpdi2.o CC lib/gcd.o CC lib/lcm.o CC arch/sparc/lib/atomic32.o CC lib/scatterlist.o AR drivers/media/usb/ttusb-dec/built-in.o AR drivers/video/fbdev/built-in.o AR drivers/media/usb/ttusb-budget/built-in.o CC lib/bitmap.o CC drivers/of/pdt.o AR fs/notify/built-in.o CC lib/list_sort.o AR drivers/misc/ti-st/built-in.o CC lib/uuid.o CC drivers/base/init.o CC arch/sparc/prom/printf.o CC drivers/base/devres.o CC drivers/base/map.o CC drivers/base/topology.o CC drivers/base/attribute_container.o CC arch/sparc/prom/ranges.o CC drivers/base/transport_class.o AR drivers/media/usb/zr364xx/built-in.o CC drivers/base/container.o CC arch/sparc/prom/tree_32.o CC drivers/base/property.o AR drivers/video/built-in.o AR drivers/misc/built-in.o AR virt/lib/built-in.o CC drivers/base/cacheinfo.o CC lib/flex_array.o AR drivers/media/usb/built-in.o CC lib/clz_ctz.o CC lib/iov_iter.o CC lib/find_bit.o CC lib/bsearch.o CC lib/memweight.o CC lib/kfifo.o CC drivers/base/dma-mapping.o CC lib/percpu-refcount.o CC lib/llist.o AS arch/sparc/lib/ashldi3.o AR virt/built-in.o CC lib/reciprocal_div.o CC lib/percpu_ida.o CC lib/rhashtable.o CC lib/once.o CC lib/refcount.o CC lib/usercopy.o AS arch/sparc/lib/ashrdi3.o CC arch/sparc/lib/bitext.o CC lib/errseq.o AR drivers/base/power/built-in.o CC lib/string_helpers.o CC lib/hexdump.o CC lib/bucket_locks.o CC lib/kstrtox.o CC lib/pci_iomap.o AR drivers/base/test/built-in.o CC lib/devres.o CC lib/iomap_copy.o CC lib/hweight.o AS arch/sparc/lib/blockops.o CC lib/syscall.o CC lib/atomic64.o CC lib/strncpy_from_user.o CC lib/strnlen_user.o CC lib/argv_split.o CC lib/chacha20.o CC lib/clz_tab.o CC lib/cmdline.o CC lib/ctype.o AS arch/sparc/lib/checksum_32.o CC lib/decompress.o CC lib/dump_stack.o CC lib/dec_and_lock.o CC lib/earlycpio.o CC lib/extable.o CC lib/idr.o CC lib/flex_proportions.o CC lib/ioremap.o CC lib/irq_regs.o CC arch/sparc/lib/cmpdi2.o CC lib/is_single_threaded.o CC lib/klist.o CC lib/int_sqrt.o AS arch/sparc/lib/copy_user.o AR drivers/media/built-in.o CC lib/kobject.o CC lib/kobject_uevent.o AS arch/sparc/lib/divdi3.o CC lib/nmi_backtrace.o AR kernel/sched/built-in.o CC lib/plist.o CC lib/radix-tree.o CC lib/nodemask.o AS arch/sparc/lib/memcpy.o AS arch/sparc/lib/memscan_32.o AS arch/sparc/lib/lshrdi3.o AS arch/sparc/lib/memcmp.o AS arch/sparc/lib/locks.o AS arch/sparc/lib/memset.o CC lib/ratelimit.o CC lib/timerqueue.o CC lib/siphash.o CC lib/sha1.o CC lib/vsprintf.o CC lib/seq_buf.o CC lib/rbtree.o CC lib/string.o CC lib/win_minmax.o CC lib/show_mem.o AS arch/sparc/lib/strlen.o AS arch/sparc/lib/strncmp_32.o AS arch/sparc/lib/udivdi3.o AS arch/sparc/lib/muldi3.o AR drivers/char/built-in.o AR arch/sparc/lib/lib.a AR drivers/rtc/rtc-core.o EXPORTS arch/sparc/lib/lib-ksyms.o AR arch/sparc/prom/lib.a EXPORTS arch/sparc/prom/lib-ksyms.o AR arch/sparc/lib/built-in.o AR drivers/rtc/built-in.o AR arch/sparc/prom/built-in.o AR fs/ramfs/ramfs.o AR fs/ramfs/built-in.o AR drivers/of/built-in.o AR kernel/time/built-in.o AR kernel/built-in.o AR drivers/base/built-in.o AR drivers/built-in.o AR mm/built-in.o AR fs/built-in.o AR arch/sparc/math-emu/built-in.o AR arch/sparc/built-in.o AR lib/lib.a EXPORTS lib/lib-ksyms.o AR lib/built-in.o GEN .version CHK include/generated/compile.h AR built-in.o LD vmlinux.o MODPOST vmlinux.o LD vmlinux SYSMAP System.map STRIP arch/sparc/boot/image kernel: arch/sparc/boot/image is ready STRIP arch/sparc/boot/zImage kernel: arch/sparc/boot/zImage is ready make[1]: Leaving directory '/home/kisskb/slave/build/linus_sparc-allnoconfig_sparc64' Completed OK # rm -rf /home/kisskb/slave/build/linus_sparc-allnoconfig_sparc64 # Build took: 0:00:07.878628