Messages in this thread | | | Date | Fri, 14 Mar 2008 00:53:17 +0100 | From | "Jesper Juhl" <> | Subject | Re: whose job is it to include various header files? |
| |
On 13/03/2008, Robert P. J. Day <rpjday@crashcourse.ca> wrote: > > more a philosophy question than anything but, while poking around > 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? > I agree with you completely. A file should explicitly include headers 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 :(
-- Jesper Juhl <jesper.juhl@gmail.com> Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html Plain text mails only, please http://www.expita.com/nomime.html
| |