Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Aug 2007 16:09:27 +0200
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        Attilio Rao <attilio@freebsd.org>
Cc:        Alfred Perlstein <alfred@freebsd.org>, freebsd-arch@freebsd.org
Subject:   Re: Lockless uidinfo.
Message-ID:  <20070824140927.GC14536@garage.freebsd.pl>
In-Reply-To: <3bbf2fe10708221202h44b3258cyf5ca5e9b867ac0e7@mail.gmail.com>
References:  <20070818120056.GA6498@garage.freebsd.pl> <20070818155041.GY90381@elvis.mu.org> <20070818161449.GE6498@garage.freebsd.pl> <200708211403.29293.jhb@freebsd.org> <20070821191902.GA4187@garage.freebsd.pl> <20070821202136.GB4187@garage.freebsd.pl> <3bbf2fe10708221202h44b3258cyf5ca5e9b867ac0e7@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--NU0Ex4SbNnrxsi6C
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Aug 22, 2007 at 09:02:53PM +0200, Attilio Rao wrote:
> 2007/8/21, Pawel Jakub Dawidek <pjd@freebsd.org>:
> >
> > New patch is here:
> >
> >         http://people.freebsd.org/~pjd/patches/uidinfo_waitfree.patch
>=20
> ---  sys/ia64/include/atomic.h.orig
> +++  sys/ia64/include/atomic.h
> @@ -370,4 +370,15 @@
>=20
>  #define	atomic_fetchadd_int		atomic_fetchadd_32
>=20
> +static __inline u_long
> +atomic_fetchadd_long(volatile u_long *p, u_long v)
> +{
> +	u_long value;
> +
> +	do {
> +		value =3D *p;
> +	} while (!atomic_cmpset_64(p, value, value + v));
> +	return (value);
> +}
> +
>=20
> In cycles like those, as you get spinning, I would arrange things in
> order to do a cpu_spinwait(). Like this:
>=20
> for (;;) {
>         value =3D *p;
>         if (atomic_cmpset_64(p, value, value + v))
>                 break;
>         cpu_spinwait();
> }

In this case there is no difference as this is MI ia64 code and
cpu_spinwait() is defined as /* nothing */ there. As a general rule,
this might be a good idea.

--=20
Pawel Jakub Dawidek                       http://www.wheel.pl
pjd@FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!

--NU0Ex4SbNnrxsi6C
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.4 (FreeBSD)

iD8DBQFGzuaXForvXbEpPzQRArq0AKC5/SuL8uxctj5tvAnblJ+nI0qN7wCePxwB
r8unBjbr2PRLARTXynf0gEE=
=937F
-----END PGP SIGNATURE-----

--NU0Ex4SbNnrxsi6C--



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