cvs commit: src/sys/sys sx.h
Ruslan Ermilov
ru at FreeBSD.org
Wed Aug 30 20:51:40 UTC 2006
On Wed, Aug 30, 2006 at 01:20:32PM -0400, John Baldwin wrote:
> On Wednesday 30 August 2006 05:37, Bruce Evans wrote:
> > On Tue, 29 Aug 2006, John Baldwin wrote:
> >
> > > jhb 2006-08-29 20:36:33 UTC
> > >
> > > FreeBSD src repository
> > >
> > > Modified files:
> > > sys/sys sx.h
> > > Log:
> > > The _sx_assert() prototype should exist if either of INVARIANTS or
> > > INVARIANT_SUPPORT is defined so you can build a kernel with
> > > INVARIANT_SUPPORT, but build a module with just INVARIANTS on.
> >
> > No it shouldn't. INVARIANT_SUPPORT is a documented prerequisite for
> > INVARIANTS. So is the resulting requirements for using INVARIANTS to
> > create non-modular "modules": From /sys/conf/NOTES:
> >
> > # The INVARIANT_SUPPORT option makes us compile in support for
> > # verifying some of the internal structures. It is a prerequisite for
> > ^^^^^^^^^^^^^^^^^^^^^^^^
> > # 'INVARIANTS', as enabling 'INVARIANTS' will make these functions be
> > ^^^^^^^^^^^^
> > # called. The intent is that you can set 'INVARIANTS' for single
> > # source files (by changing the source file or specifying it on the
> > # command line) if you have 'INVARIANT_SUPPORT' enabled. Also, if you
> > ^^^^^^^^^^^^
> > # wish to build a kernel module with 'INVARIANTS', then adding
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > # 'INVARIANT_SUPPORT' to your kernel will provide all the necessary
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > # infrastructure without the added overhead.
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >
> > However, INVARIANTS is a fairly bogus option. Last time I looked
> > (long ago) it only controlled a small amount of kernel bloat, and there
> > are probably many other functions that are defined unconditionally else
> > modules with INVARIANTS would be more broken.
>
> Err, the text in NOTES is probably wrong then. The idea is that INVARIANTS
> enables various assertions. Similar to how NDEBUG turns off assert() (but
> inverted). The purpose of INVARIANT_SUPPORT is to provide any needed
> assertion-supporting code (such as _foo_assert()) macros in the kernel.
> Thus, if I want to run any code that uses INVARIANTs, I need to have a kernel
> built with INVARIANT_SUPPORT. However, I might build only selected portions
> of the kernel with INVARIANTS. For example, I might build none of the kernel
> with INVARIANTS, but only a kernel module for a device driver being developed
> or a test kernel module (like my crash.c and crash2.c.).
>
I read what you've written precisely as what was quoted from NOTES.
I.e., to be able to compile some bit with INVARIANTS, the kernel
should have been compiled with INVARIANT_SUPPORT. _sx_asser() is
part of that support, not a "user" of invatianted code. If some
code that uses sx locks needs to be "invarianted", it can be
compiled with only "options INVARIANTS".
I fail to see how your commit follows this, however. What you have
committed may eventually turn into "if option INVARINANTS is enabled
when compiling a kernel, automatically enable the INVARIANT_SUPPORT
option" -- when all INVARIANT_SUPPORT ifdefs will be converted to
INVARIANT_SUPPORT || INVARIANTS.
Cheers,
--
Ruslan Ermilov
ru at FreeBSD.org
FreeBSD committer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/cvs-src/attachments/20060830/065ade70/attachment.pgp
More information about the cvs-src
mailing list