Date: Mon, 14 Jun 2010 11:52:05 +0300 From: Kostik Belousov <kostikbel@gmail.com> To: Lawrence Stewart <lstewart@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Pawel Jakub Dawidek <pjd@freebsd.org> Subject: Re: svn commit: r209119 - head/sys/sys Message-ID: <20100614085205.GD13238@deviant.kiev.zoral.com.ua> In-Reply-To: <4C158B71.205@freebsd.org> References: <201006130239.o5D2du3m086332@svn.freebsd.org> <20100613101025.GD1320@garage.freebsd.pl> <4C158B71.205@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On Mon, Jun 14, 2010 at 11:52:49AM +1000, Lawrence Stewart wrote:
> On 06/13/10 20:10, Pawel Jakub Dawidek wrote:
> >On Sun, Jun 13, 2010 at 02:39:55AM +0000, Lawrence Stewart wrote:
> [snip]
> >>
> >>Modified: head/sys/sys/pcpu.h
> >>==============================================================================
> >>--- head/sys/sys/pcpu.h Sun Jun 13 01:27:29 2010 (r209118)
> >>+++ head/sys/sys/pcpu.h Sun Jun 13 02:39:55 2010 (r209119)
> >>@@ -106,6 +106,17 @@ extern uintptr_t dpcpu_off[];
> >> #define DPCPU_ID_GET(i, n) (*DPCPU_ID_PTR(i, n))
> >> #define DPCPU_ID_SET(i, n, v) (*DPCPU_ID_PTR(i, n) = v)
> >>
> >>+/*
> >>+ * Utility macros.
> >>+ */
> >>+#define DPCPU_SUM(n, var, sum) \
> >>+do { \
> >>+ (sum) = 0; \
> >>+ u_int i; \
> >>+ CPU_FOREACH(i) \
> >>+ (sum) += (DPCPU_ID_PTR(i, n))->var; \
> >>+} while (0)
> >
> >I'd suggest first swapping variable declaration and '(sum) = 0;'.
> >Also using 'i' as a counter in macro can easly lead to name collision.
> >If you need to do it, I'd suggest '_i' or something.
>
> Given that the DPCPU variable name space is flat and variable names have
> to be unique, perhaps something like the following would address the
> concerns raised?
>
> #define DPCPU_SUM(n, var, sum) \
> do { \
> u_int _##n##_i; \
> (sum) = 0; \
> CPU_FOREACH(_##n##_i) \
> (sum) += (DPCPU_ID_PTR(_##n##_i, n))->var; \
> } while (0)
You do not have to jump through this. Mostly by convention, in our kernel
sources, names with "_" prefix are reserved for the infrastructure (cannot
say implementation). I think it is quite safe to use _i for the iteration
variable.
As an example of this, look at sys/sys/mount.h, implementation of
VFS_NEEDGIANT, VFS_LOCK_GIANT etc macros. They do use gcc ({}) extension
to provide function-like macros, but this is irrelevant. Or, look at
the VFS_ASSERT_GIANT that is exactly like what you need.
[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (FreeBSD)
iEYEARECAAYFAkwV7bQACgkQC3+MBN1Mb4iMjACfeF3vcuEkv2MoW7zhQULyZrBi
SjgAoPCy/3A3aegSBYjw4ht0YBFqX0o4
=NpwE
-----END PGP SIGNATURE-----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100614085205.GD13238>
