Re: panic at vm_page_wire with FreeBSD 9.0 Beta 3

From: Arnaud Lacombe <lacombar_at_gmail.com>
Date: Mon, 7 Nov 2011 14:31:30 -0500
Hi,

On Wed, Nov 2, 2011 at 6:32 AM, Andriy Gapon <avg_at_freebsd.org> wrote:
>
> [restored cc: to the original poster]
>
> on 02/11/2011 08:10 Benjamin Kaduk said the following:
>> I am perhaps confused.  Last I checked, bsd.kmod.mk caused '-include
>> opt_global.h' to be passed on the command line.  Is the issue just that the
>> opt_global.h used for the kmod could be different from the actual kernel's
>> opt_global.h, because KERNCONF was not specified and the header is generated at
>> module-build time?  In this case, clearly the onus is on the user to pass
>> KERNCONF at module build time.
>
> To be precise, this is what is actually passed to a compiler:
> sys/conf/kmod.mk:
> .if defined(KERNBUILDDIR)
> CFLAGS+=     -DHAVE_KERNEL_OPTION_HEADERS -include ${KERNBUILDDIR}/opt_global.h
> .endif
>
> where KERNBUILDDIR can be passed via environment from a kernel build:
> sys/conf/kern.post.mk:
> MKMODULESENV+=  KERNBUILDDIR="${.CURDIR}" SYSDIR="${SYSDIR}"
>
> KERNCONF does not have any meaning in a module build.
>
> To make sure that a module build sees exactly the same kernel options as a
> kernel with which the module should work, one has to either build the module
> together with the kernel (within the kernel build; search for MODULES in
> make.conf(5)) or to manually specify KERNBUILDDIR to point to a correct kernel
> build directory.  (Which to a certain degree implies impossibility to build a
> "perfect" module for a pre-built binary kernel or to provide a "perfect"
> universal pre-built module for any custom kernel)
>
> Of course, the real problem is that modules should not care about any (or at
> least some) kernel options, they should be isolated from the options via a
> proper KPI/KBI (perhaps DDI or "module-to-kernel interface" or whatever).  A
> module should be able to work correctly with kernels built with different options.
>
You cannot be make a point in shade of gray, it either "must care" or
"must not care" about kernel option, not "care about some, but not
other". Moreover, you cannot advocate stable internal KBI/KPI when you
are not even able to provide a stable userland ABI...

> P.P.S. [and tangential] I see that many module makefiles fake up various kernel
> options in a fashion similar to the following:
> .if !defined(KERNBUILDDIR)
> opt_compat.h:
>        echo "#define COMPAT_FREEBSD6 1" > ${.TARGET}
>
> opt_kbd.h:
>        echo "#define KBD_INSTALL_CDEV 1" > ${.TARGET}
> .endif
>
> And handful of modules fake up opt_global.h, e.g.:
> opt_global.h:
>        echo "#define ALTQ 1"     > ${.TARGET}
<personal opinion>This mess is utterly broken.</personal opinion>

FWIW, I advocate to make KERNBUILDDIR (ie. kernel option's
configuration) mandatory for building any modules.

 - Arnaud

> --
> Andriy Gapon
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
>
Received on Mon Nov 07 2011 - 18:31:32 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:20 UTC