I tried to get a better grasp of what kind of warnings we are actually talking
about and looked at the x86 allmodconfig W=1 output on today's linux-next.
What I found is that most subsystems are clean for most warnings, a
few dozen subsystems have a very small number of warnings and a
handful of subsystems have a ton of (mostly identical) warnings, see
below for the full list and how to reproduce.
Based on the numbers, I would still suggest an approach that starts
from multiple angles:
- Add a patch similar to yours that turns on W=1 for the largest
known-clean subsystems (drivers/net/ethernet, drivers/media,
drivers/mfd, ...), but without the date magic that won't be needed
if we follow through with the rest of the plan.
- Turn on -Wold-style-definition -Wmissing-include-dirs -Wstringop-truncation
globally, since they don't seem to cause any output any more.
- Work on fixing all -Wextra warnings (except -Woverride-init
-Wunused-parameter -Wmissing-field-initializers -Wtype-limits)
across the tree, then enable -Wextra unconditionally. I see this
being relevant to only 25 files in the allmodconfig build, which is
much less than I expected for -Wextra. There are a couple more
for clang as well, but not that many either.
- Same for Wpacked-not-aligned, which happens in only 10 files
and almost exclusively in wireless network drivers
- For each of -Wmissing-prototypes, -Wsuggest-attribute=format,
-Wunused-but-set-variable, -Wunused-const-variable, and
-Woverride-init, come up with a patch that disables or fixes
the warning for the largest offender(s) and enables it globally
in linux-next but not mainline, with the hope that others fix the
reported issues. Do it one at a time, starting with
-Wmissing-prototypes. When most of the output is gone
for one of them, work on the final patch to deal with the remaining
files and enable the warning unconditionally, then move on to the
next in the list. This will take a while.
- When most of the above are done, redefine W=1 to include
a larger set of warnings that are considered the most useful
but are currently disabled at this level. For each subsystem that
enables the current W=1 warnings unconditionally, either
find a way to only enable the remainder of the old set or send
fixes addressing the new issues and leave it at W=1.
Arnd
8<---
grep warning: allmod-warnings-gcc-9 | grep '\[-W' | sed -e
's:^../\([\./a-zA-Z0-9_-]*\)\:.* \(\[-W.*\]\):\2 \1:' | cut -f -2 -d/
| sort | uniq -c
1 [-Wcast-function-type] drivers/firewire
12 [-Wcast-function-type] drivers/net
10 [-Wcast-function-type] include/linux
2 [-Wempty-body] drivers/base
2 [-Wempty-body] drivers/dax
1 [-Wempty-body] drivers/input
1 [-Wempty-body] drivers/isdn
2 [-Wempty-body] drivers/net
2 [-Wempty-body] drivers/platform
4 [-Wempty-body] drivers/scsi
2 [-Wempty-body] drivers/staging
1 [-Wempty-body] drivers/target
2 [-Wempty-body] fs/hfs
4 [-Wempty-body] fs/hfsplus
5 [-Wempty-body] fs/jffs2
1 [-Wempty-body] fs/posix_acl.c
1 [-Wignored-qualifiers] drivers/block
1 [-Wignored-qualifiers] drivers/gpu
1 [-Wignored-qualifiers] drivers/net
573 [-Wmissing-prototypes] arch/x86 # mostly asm/syscall_wrapper.h
12 [-Wmissing-prototypes] drivers/acpi
1 [-Wmissing-prototypes] drivers/base
14 [-Wmissing-prototypes] drivers/char
1 [-Wmissing-prototypes] drivers/clk
34 [-Wmissing-prototypes] drivers/crypto
1 [-Wmissing-prototypes] drivers/dax
5 [-Wmissing-prototypes] drivers/firmware
324 [-Wmissing-prototypes] drivers/gpu # mostly amdgpu
1 [-Wmissing-prototypes] drivers/memstick
3 [-Wmissing-prototypes] drivers/net
20 [-Wmissing-prototypes] drivers/nvdimm
9 [-Wmissing-prototypes] drivers/ptp
1 [-Wmissing-prototypes] drivers/rpmsg
1 [-Wmissing-prototypes] drivers/rtc
2 [-Wmissing-prototypes] drivers/scsi
3 [-Wmissing-prototypes] drivers/tty
1 [-Wmissing-prototypes] drivers/vfio
1 [-Wmissing-prototypes] drivers/xen
1 [-Wmissing-prototypes] fs/d_path.c
2 [-Wmissing-prototypes] fs/nfs
1 [-Wmissing-prototypes] include/linux
1 [-Wmissing-prototypes] kernel/bpf
1 [-Wmissing-prototypes] kernel/debug
1 [-Wmissing-prototypes] kernel/events
1 [-Wmissing-prototypes] kernel/exit.c
9 [-Wmissing-prototypes] kernel/gcov
1 [-Wmissing-prototypes] kernel/irq
1 [-Wmissing-prototypes] kernel/kallsyms.c
10 [-Wmissing-prototypes] kernel/kcov.c
3 [-Wmissing-prototypes] kernel/locking
1 [-Wmissing-prototypes] kernel/module.c
4 [-Wmissing-prototypes] kernel/panic.c
1 [-Wmissing-prototypes] kernel/power
2 [-Wmissing-prototypes] kernel/sched
1 [-Wmissing-prototypes] kernel/signal.c
1 [-Wmissing-prototypes] kernel/smp.c
9 [-Wmissing-prototypes] kernel/trace
1 [-Wmissing-prototypes] lib/decompress_inflate.c
1 [-Wmissing-prototypes] lib/decompress_unxz.c
1 [-Wmissing-prototypes] lib/decompress_unzstd.c
4 [-Wmissing-prototypes] lib/kunit
2 [-Wmissing-prototypes] lib/lz4
1 [-Wmissing-prototypes] lib/lzo
1 [-Wmissing-prototypes] lib/radix-tree.c
1 [-Wmissing-prototypes] lib/test_ida.c
10 [-Wmissing-prototypes] lib/zstd
1 [-Wmissing-prototypes] mm/early_ioremap.c
1 [-Wmissing-prototypes] mm/filemap.c
2 [-Wmissing-prototypes] mm/page_alloc.c
1 [-Wmissing-prototypes] mm/truncate.c
1 [-Wmissing-prototypes] mm/vmalloc.c
4 [-Wmissing-prototypes] net/ipv6
2 [-Wmissing-prototypes] net/netfilter
4 [-Wmissing-prototypes] samples/ftrace
5 [-Wmissing-prototypes] security/integrity
1 [-Wmissing-prototypes] security/selinux
1 [-Woverflow] lib/bitfield_kunit.c
1 [-Woverride-init] arch/x86
27 [-Woverride-init] drivers/ata
1 [-Woverride-init] drivers/block
86 [-Woverride-init] drivers/gpu
1 [-Woverride-init] include/linux
1 [-Woverride-init] kernel/bpf
4 [-Woverride-init] kernel/time
1 [-Woverride-init] lib/errname.c
3 [-Woverride-init] net/wimax
77 [-Wpacked-not-aligned] drivers/net
3 [-Wpacked-not-aligned] drivers/scsi
155 [-Wpacked-not-aligned] drivers/staging
1 [-Wsuggest-attribute=format] arch/x86
1 [-Wsuggest-attribute=format] drivers/acpi
1 [-Wsuggest-attribute=format] drivers/clk
2 [-Wsuggest-attribute=format] drivers/gpu
1 [-Wsuggest-attribute=format] drivers/hid
2 [-Wsuggest-attribute=format] drivers/isdn
1 [-Wsuggest-attribute=format] drivers/pnp
2 [-Wsuggest-attribute=format] drivers/scsi
1 [-Wsuggest-attribute=format] drivers/xen
2 [-Wsuggest-attribute=format] fs/reiserfs
10 [-Wsuggest-attribute=format] include/trace
2 [-Wsuggest-attribute=format] kernel/audit.c
2 [-Wsuggest-attribute=format] kernel/bpf
1 [-Wsuggest-attribute=format] kernel/panic.c
28 [-Wsuggest-attribute=format] kernel/trace
3 [-Wsuggest-attribute=format] lib/kunit
1 [-Wsuggest-attribute=format] lib/vsprintf.c
1 [-Wsuggest-attribute=format] net/dccp
1 [-Wsuggest-attribute=format] net/netfilter
1 [-Wsuggest-attribute=format] net/tipc
2 [-Wsuggest-attribute=format] security/tomoyo
12 [-Wunused-but-set-variable] arch/x86
1 [-Wunused-but-set-variable] drivers/base
1 [-Wunused-but-set-variable] drivers/block
8 [-Wunused-but-set-variable] drivers/char
1 [-Wunused-but-set-variable] drivers/clk
1 [-Wunused-but-set-variable] drivers/clocksource
1 [-Wunused-but-set-variable] drivers/firewire
67 [-Wunused-but-set-variable] drivers/gpu
4 [-Wunused-but-set-variable] drivers/hid
1 [-Wunused-but-set-variable] drivers/i2c
4 [-Wunused-but-set-variable] drivers/ide
9 [-Wunused-but-set-variable] drivers/input
1 [-Wunused-but-set-variable] drivers/isdn
1 [-Wunused-but-set-variable] drivers/leds
1 [-Wunused-but-set-variable] drivers/memstick
7 [-Wunused-but-set-variable] drivers/message
2 [-Wunused-but-set-variable] drivers/mmc
2 [-Wunused-but-set-variable] drivers/mtd
47 [-Wunused-but-set-variable] drivers/net
3 [-Wunused-but-set-variable] drivers/platform
1 [-Wunused-but-set-variable] drivers/rapidio
30 [-Wunused-but-set-variable] drivers/scsi
1 [-Wunused-but-set-variable] drivers/soc
1 [-Wunused-but-set-variable] drivers/spmi
47 [-Wunused-but-set-variable] drivers/staging
1 [-Wunused-but-set-variable] drivers/thermal
1 [-Wunused-but-set-variable] drivers/thunderbolt
9 [-Wunused-but-set-variable] drivers/tty
1 [-Wunused-but-set-variable] drivers/usb
1 [-Wunused-but-set-variable] drivers/vhost
47 [-Wunused-but-set-variable] drivers/video
2 [-Wunused-but-set-variable] drivers/w1
12 [-Wunused-but-set-variable] fs/ceph
11 [-Wunused-but-set-variable] fs/coda
2 [-Wunused-but-set-variable] fs/jffs2
3 [-Wunused-but-set-variable] fs/ntfs
3 [-Wunused-but-set-variable] kernel/trace
1 [-Wunused-but-set-variable] lib/decompress_unlzo.c
1 [-Wunused-but-set-variable] lib/test_blackhole_dev.c
1 [-Wunused-but-set-variable] lib/test_kasan_module.c
4 [-Wunused-but-set-variable] lib/test_ubsan.c
1 [-Wunused-but-set-variable] net/nfc
1 [-Wunused-but-set-variable] security/smack
2 [-Wunused-const-variable=] drivers/clk
2513 [-Wunused-const-variable=] drivers/gpu # amdgpu
1 [-Wunused-const-variable=] drivers/hid
1 [-Wunused-const-variable=] drivers/ide
3 [-Wunused-const-variable=] drivers/input
17 [-Wunused-const-variable=] drivers/net
122 [-Wunused-const-variable=] drivers/staging # rtl8xxx
1 [-Wunused-const-variable=] drivers/usb
279 [-Wunused-const-variable=] drivers/video # sis-fbdev
5 [-Wunused-const-variable=] drivers/visorbus
6 [-Wunused-const-variable=] fs/efs
1 [-Wunused-const-variable=] fs/fscache
16 [-Wunused-const-variable=] fs/orangefs
236 [-Wunused-const-variable=] include/linux # lsm_hook_defs.h, zstd.h
32 [-Wunused-const-variable=] lib/zstd
$ grep -h warning: allmod-warnings-clang-11 | grep '\[-W' | sed -e
's:^../\([\./a-zA-Z0-9_-]*\)\:.* \(\[-W.*\]\):\2 \1:' | cut -f -2 -d/
| sort | uniq -c | grep -w Wmissing-prototypes
1 [-Wconstant-conversion] lib/bitfield_kunit.c
1 [-Wformat] drivers/acpi
4 [-Wformat] drivers/atm
1 [-Wformat] drivers/gpio
23 [-Wformat] drivers/gpu
2 [-Wformat] drivers/hid
1 [-Wformat] drivers/hwmon
4 [-Wformat] drivers/iio
1 [-Wformat] drivers/infiniband
5 [-Wformat] drivers/media
6 [-Wformat] drivers/misc
48 [-Wformat] drivers/net
3 [-Wformat] drivers/ntb
1 [-Wformat] drivers/platform
6 [-Wformat] drivers/scsi
2 [-Wformat] drivers/soc
14 [-Wformat] drivers/target
1 [-Wformat] fs/afs
2 [-Wformat] fs/nfsd
1 [-Wformat] kernel/locking
13 [-Wformat] lib/test_printf.c
2 [-Wformat] net/8021q
1 [-Wformat] net/batman-adv
2 [-Wformat] net/ceph
16 [-Wformat] net/ipv4
2 [-Wformat] net/ipv6
9 [-Wformat] net/l2tp
24 [-Wformat] net/netfilter
1 [-Wformat] net/rxrpc
1 [-Wignored-qualifiers] drivers/block
1 [-Wignored-qualifiers] drivers/gpu
1 [-Wignored-qualifiers] drivers/net
1 [-Winitializer-overrides] arch/x86
27 [-Winitializer-overrides] drivers/ata
1 [-Winitializer-overrides] drivers/block
86 [-Winitializer-overrides] drivers/gpu
259 [-Winitializer-overrides] drivers/net
1 [-Winitializer-overrides] kernel/bpf
4 [-Winitializer-overrides] kernel/time
1 [-Winitializer-overrides] lib/errname.c
3 [-Winitializer-overrides] net/wimax
1 [-Wnull-pointer-arithmetic] drivers/atm
1 [-Wnull-pointer-arithmetic] fs/kernfs
1 [-Wnull-pointer-arithmetic] fs/seq_file.c
1 [-Wnull-pointer-arithmetic] security/tomoyo
1 [-Wpointer-bool-conversion] drivers/net
1 [-Wsometimes-uninitialized] drivers/vfio
1 [-Wtautological-constant-out-of-range-compare] drivers/block
1 [-Wtautological-constant-out-of-range-compare] drivers/gpu
1 [-Wtautological-constant-out-of-range-compare] drivers/md
2 [-Wtautological-constant-out-of-range-compare] drivers/media
1 [-Wtautological-constant-out-of-range-compare] drivers/net
1 [-Wtautological-constant-out-of-range-compare] drivers/staging
1 [-Wtautological-constant-out-of-range-compare] fs/ceph
3 [-Wtautological-constant-out-of-range-compare] fs/vboxsf
1 [-Wtautological-constant-out-of-range-compare] kernel/bpf
1 [-Wtautological-constant-out-of-range-compare] kernel/kcov.c
2 [-Wtautological-constant-out-of-range-compare] net/ceph
1 [-Wtautological-constant-out-of-range-compare] net/ipv4
1 [-Wuninitialized] drivers/staging
2 [-Wunneeded-internal-declaration] drivers/gpu
2 [-Wunused-const-variable] drivers/clk
19 [-Wunused-const-variable] drivers/gpu
1 [-Wunused-const-variable] drivers/ide
12 [-Wunused-const-variable] drivers/net
2 [-Wunused-const-variable] drivers/staging
1 [-Wunused-const-variable] drivers/usb
1 [-Wunused-const-variable] fs/fscache
2 [-Wunused-function] arch/x86
1 [-Wunused-function] block/blk-zoned.c
1 [-Wunused-function] block/partitions
1 [-Wunused-function] drivers/acpi
3 [-Wunused-function] drivers/atm
2 [-Wunused-function] drivers/bcma
2 [-Wunused-function] drivers/cpufreq
2 [-Wunused-function] drivers/crypto
14 [-Wunused-function] drivers/dma
1 [-Wunused-function] drivers/dma-buf
1 [-Wunused-function] drivers/edac
1 [-Wunused-function] drivers/fpga
3 [-Wunused-function] drivers/gpio
15 [-Wunused-function] drivers/gpu
1 [-Wunused-function] drivers/hv
3 [-Wunused-function] drivers/hwmon
1 [-Wunused-function] drivers/hwtracing
4 [-Wunused-function] drivers/infiniband
1 [-Wunused-function] drivers/isdn
1 [-Wunused-function] drivers/leds
1 [-Wunused-function] drivers/md
37 [-Wunused-function] drivers/media
2 [-Wunused-function] drivers/mfd
5 [-Wunused-function] drivers/misc
3 [-Wunused-function] drivers/mmc
2 [-Wunused-function] drivers/mtd
162 [-Wunused-function] drivers/net
3 [-Wunused-function] drivers/nvme
2 [-Wunused-function] drivers/pci
1 [-Wunused-function] drivers/pcmcia
2 [-Wunused-function] drivers/phy
1 [-Wunused-function] drivers/pwm
1 [-Wunused-function] drivers/rtc
29 [-Wunused-function] drivers/scsi
1 [-Wunused-function] drivers/soc
1 [-Wunused-function] drivers/spi
6 [-Wunused-function] drivers/staging
1 [-Wunused-function] drivers/thermal
6 [-Wunused-function] drivers/tty
7 [-Wunused-function] drivers/usb
1 [-Wunused-function] drivers/vdpa
5 [-Wunused-function] drivers/video
3 [-Wunused-function] drivers/watchdog
1 [-Wunused-function] fs/cifs
1 [-Wunused-function] fs/dlm
1 [-Wunused-function] fs/fuse
1 [-Wunused-function] fs/lockd
1 [-Wunused-function] fs/nfsd
1 [-Wunused-function] fs/ocfs2
2 [-Wunused-function] kernel/locking
1 [-Wunused-function] kernel/power
3 [-Wunused-function] kernel/time
4 [-Wunused-function] kernel/trace
1 [-Wunused-function] lib/bitfield_kunit.c
1 [-Wunused-function] lib/zlib_inflate
1 [-Wunused-function] mm/vmalloc.c
2 [-Wunused-function] net/bluetooth
2 [-Wunused-function] net/ipv6
1 [-Wunused-function] net/sunrpc
2 [-Wunused-function] security/apparmor
2 [-Wunused-function] sound/drivers
3 [-Wunused-function] sound/pci
2 [-Wunused-function] sound/soc
4 [-Wvoid-pointer-to-enum-cast] drivers/ata
1 [-Wvoid-pointer-to-enum-cast] drivers/char
2 [-Wvoid-pointer-to-enum-cast] drivers/crypto
1 [-Wvoid-pointer-to-enum-cast] drivers/devfreq
2 [-Wvoid-pointer-to-enum-cast] drivers/dma
1 [-Wvoid-pointer-to-enum-cast] drivers/gpio
5 [-Wvoid-pointer-to-enum-cast] drivers/gpu
15 [-Wvoid-pointer-to-enum-cast] drivers/hwmon
3 [-Wvoid-pointer-to-enum-cast] drivers/i2c
10 [-Wvoid-pointer-to-enum-cast] drivers/iio
1 [-Wvoid-pointer-to-enum-cast] drivers/input
6 [-Wvoid-pointer-to-enum-cast] drivers/media
9 [-Wvoid-pointer-to-enum-cast] drivers/mfd
2 [-Wvoid-pointer-to-enum-cast] drivers/mtd
1 [-Wvoid-pointer-to-enum-cast] drivers/mux
9 [-Wvoid-pointer-to-enum-cast] drivers/net
7 [-Wvoid-pointer-to-enum-cast] drivers/phy
1 [-Wvoid-pointer-to-enum-cast] drivers/platform
2 [-Wvoid-pointer-to-enum-cast] drivers/regulator
1 [-Wvoid-pointer-to-enum-cast] drivers/reset
4 [-Wvoid-pointer-to-enum-cast] drivers/rtc
1 [-Wvoid-pointer-to-enum-cast] drivers/scsi
1 [-Wvoid-pointer-to-enum-cast] drivers/soc
2 [-Wvoid-pointer-to-enum-cast] drivers/spi
1 [-Wvoid-pointer-to-enum-cast] drivers/thermal
3 [-Wvoid-pointer-to-enum-cast] sound/soc