Re: whose job is it to include various header files?

From: Randy Dunlap
Date: Thu Mar 13 2008 - 18:48:49 EST


On Thu, 13 Mar 2008 18:09:12 -0400 (EDT) Robert P. J. Day 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?

Yes.

---
~Randy
--
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/