Unused defines: some numbers

From: Alexey Dobriyan
Date: Sun Aug 21 2005 - 16:37:15 EST


Inspired by LWN article "Our [desktop] bloat problem" and a comment
about probability of finding unused prototype in kernel.

This is purely FYI.

version | LOC | size | nr_defines | nr_used | bloat |
| *.[ch] | *.[ch] | [1] | [2] | % |
-------------+---------+-----------+------------+---------+-------+
0.01 | 8413 | 190551 | 698 | 398 | 42.98 | [4]
1.0 | 165165 | 4413579 | 5791 | 4472 | 22.78 |
1.2 | 281985 | 7599324 | 10840 | 7721 | 28.77 |
1.3 | 310545 | 8332410 | 11637 | 8303 | 28.65 |
2.0 | 674422 | 18866984 | 23804 | 16746 | 29.65 |
2.6.13-rc6-? | 6133558 | 180252914 | 248063 | 151492 | 38.93 | [3]

Consider the numbers as zero-order approximation because of obvious
flaws in this "research":

* Once one layer of unused defines is removed, another appears
(real bloat >= bloat).
* Possible ## obfuscation (real bloat <= bloat).
* _Of_course_, my regexp-fu sucks (real nr_defines != nr_defines).
* Counting doesn't understand that
include/asm-alpha/unistd.h: #define FUBAR 1
include/asm-sparc/unistd.h: #define FUBAR 1
means "unused" (real bloat >= bloat).
* Some numbers in *.c files can be these unused defines
(real bloat <= bloat).

HTH to not put every single piece of hardware spec into kernel next
time.

P. S.: regk_iop_sw_cfg_rw_fifo_out1_extra_owner_default, no less.
-------------------------------------------------------------------
[1] As in

find . -type f -name *.[ch] | \
xargs grep "#[\t ]*define[\t ]" | \
sed "s/.*#[\t ]*define[\t ]*//" | \
sed "s/[\t (].*//" | \
sort -u

[2] "used" means

grep $DEFINE -w -r . | wc -l >= 2

[3] Quite recent 2.6.13-rc6-git-something. I forgot [to cat down] exact version.
[4] Not Linus's fault ;-). Remember about __NR_*.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/