Skip site navigation (1)Skip section navigation (2)
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

--G/vVCphCGw+yuveY
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

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
> >>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D
> >>--- 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) =3D v)
> >>
> >>+/*
> >>+ * Utility macros.
> >>+ */
> >>+#define DPCPU_SUM(n, var, sum)					 \
> >>+do {								 \
> >>+	(sum) =3D 0;							\
> >>+	u_int i;							\
> >>+	CPU_FOREACH(i)							\
> >>+		(sum) +=3D (DPCPU_ID_PTR(i, n))->var;			\
> >>+} while (0)
> >
> >I'd suggest first swapping variable declaration and '(sum) =3D 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.
>=20
> Given that the DPCPU variable name space is flat and variable names have=
=20
> to be unique, perhaps something like the following would address the=20
> concerns raised?
>=20
> #define DPCPU_SUM(n, var, sum)                                         \
> do {                                                                   \
>         u_int _##n##_i;                                                \
>         (sum) =3D 0;                                                     \
>         CPU_FOREACH(_##n##_i)                                          \
>                 (sum) +=3D (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.

--G/vVCphCGw+yuveY
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (FreeBSD)

iEYEARECAAYFAkwV7bQACgkQC3+MBN1Mb4iMjACfeF3vcuEkv2MoW7zhQULyZrBi
SjgAoPCy/3A3aegSBYjw4ht0YBFqX0o4
=NpwE
-----END PGP SIGNATURE-----

--G/vVCphCGw+yuveY--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100614085205.GD13238>