Hi Andrew, module.c and module.h conatains code for finding exported symbols which are declared with EXPORT_UNUSED_SYMBOL, and this code is compiled in even if CONFIG_UNUSED_SYMBOLS is not set and thus there can be no EXPORT_UNUSED_SYMBOLs in modules anyway (because EXPORT_UNUSED_SYMBOL(x) are compiled out to nothing then). This patch adds required #ifdefs. This shrinks module.o and each *.ko file. Patch also regroups some struct module members so that on 64 bit CPUs we are not wasting 32 bits on padding here: const struct kernel_symbol *unused_syms; unsigned int num_unused_syms; const unsigned long *unused_crcs; It groups counters and pointers separately. Patch makes small edit to help text of CONFIG_MODULE_UNLOAD - it explicitly says that without that option, kernel will be also faster, not only "smaller and simpler". When I realized how much churn is going on under the hood in order to make module unloading possible, I felt that users are not informed well enough about it in the help text. And finally, structure members which hold length of module code (four such members there) and count of symbols are converted from longs to ints. We cannot possibly have a module where 32 bits won't be enough to hold such counts. For one, module loading checks module size for sanity before loading, so such insanely big module will fail that test first. In short, patch makes trivial changes which are "obviously correct" (famous last words). Patch is compile tested with various combinations of CONFIGs. Please put it into -mm. Signed-off-by: Denys Vlasenko -- vda