'static inline' vs macros for kernel functions ? (was how to handle
name clashes in linux/freebsd kernel sources ?)
Luigi Rizzo
rizzo at icir.org
Tue Jun 26 19:31:31 UTC 2007
This is related to the post attached at the end of this email.
In this commit:
CVS log for src/sys/sys/systm.h
Revision 1.252: download - view: text, markup, annotated - select for diffs
Fri Mar 9 22:41:01 2007 UTC (3 months, 2 weeks ago) by jhb
msleep() changed from a function to a macro wrapping _sleep().
Being a macro, it is a lot harder to hide it in case of name clashes
such as the one mentioned below.
This raises the question - what is the point in using macros
in cases like this where we could use static inline function and
probably even exploit better compiler checks ?
Would it be possible to revert msleep() to a real function ?
cheers
luigi
On Tue, Jun 26, 2007 at 04:07:58AM -0700, Luigi Rizzo wrote:
> hi,
> as part of the linux-kmod-compat code, and also SoC-KVM work,
> we are integrating some linux kernel source code with FreeBSD source,
> and there are a number of clashes in names (macros, functions, etc.)
> used in different ways in the two camps.
>
> Any ideas on how to handle the conflict ? As a temporary workaround we
> added a _compat suffix (in the source code) to the linux names,
> but this is of course undesirable, especially for widely used names.
>
> E.g. take these two examples:
>
> msleep() - used to be a function in FreeBSD 6.x, but now it is a macro
>
> when it was a function we could make the linux source do the following
> #include <sys/systm.h> // bring in the prototype
> #define msleep linux_msleep // override for linux source
> // now reinclusion of sys/systm.h won't give problems
> and then implement the linux function. However this breaks with
> FreeBSD macros that call msleep, because they will be expanded using
> linux msleep.
>
> With the macro version, we have not found a solution yet.
>
> list manipulation macros
> these have the same names on linux and FreeBSD, but different
> arguments, so they are not compatible. Here the redefinition through
> a macro won't even work.
>
> So... any ideas on how to handle this, short of renaming the linux
> macros ?
>
> cheers
> luigi
More information about the freebsd-current
mailing list