On 13/03/2008, Robert P. J. Day <rpjday@xxxxxxxxxxxxxx> wrote:more a philosophy question than anything but, while poking aroundI agree with you completely. A file should explicitly include headers
the percpu stuff today, i noticed in the header file linux/percpu.h
the opening snippet:
#include <linux/preempt.h>
#include <linux/slab.h> /* For kmalloc() */
#include <linux/smp.h>
#include <linux/string.h> /* For memset() */
#include <linux/cpumask.h>
...
hmmm, i thought to myself (because that's how i refer to myself), i
wonder why this header file is including headers for kmalloc() and
memset() when this header file makes no reference to those routines.
let's see what happens if i remove them and:
$ make distclean
$ make defconfig [x86]
$ make
... chug chug chug ...
CC arch/x86/kernel/nmi_32.o
arch/x86/kernel/nmi_32.c: In function 'check_nmi_watchdog':
arch/x86/kernel/nmi_32.c:81: error: implicit declaration of function 'kmalloc'
arch/x86/kernel/nmi_32.c:81: error: 'GFP_KERNEL' undeclared (first use in this function)
arch/x86/kernel/nmi_32.c:81: error: (Each undeclared identifier is reported only once
arch/x86/kernel/nmi_32.c:81: error: for each function it appears in.)
arch/x86/kernel/nmi_32.c:81: warning: assignment makes pointer from integer without a cast
arch/x86/kernel/nmi_32.c:118: error: implicit declaration of function 'kfree'
make[1]: *** [arch/x86/kernel/nmi_32.o] Error 1
make: *** [arch/x86/kernel] Error 2
$
ok, now i know. but that means, of course, that nmi_32.c is
invoking kmalloc() without ever having included the necessary header
file for it -- it's just inheriting that from linux/percpu.h.
doesn't that (sort of) violate the kernel coding style? if a file
somewhere needs the contents of some header file, isn't it that file's
responsibility to explicitly include it, and not quietly realize it's
getting it from elsewhere?
for the stuff it uses and not rely on implicit includes done
elsewhere. Cleaning that up is going to touch a lot of files though
for no real short term gain (there is a long term gain of
maintainability though), so it's going to be a loveless job :(