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
[-- Attachment #1 --] 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 > > --- sys/ia64/include/atomic.h.orig > +++ sys/ia64/include/atomic.h > @@ -370,4 +370,15 @@ > > #define atomic_fetchadd_int atomic_fetchadd_32 > > +static __inline u_long > +atomic_fetchadd_long(volatile u_long *p, u_long v) > +{ > + u_long value; > + > + do { > + value = *p; > + } while (!atomic_cmpset_64(p, value, value + v)); > + return (value); > +} > + > > In cycles like those, as you get spinning, I would arrange things in > order to do a cpu_spinwait(). Like this: > > for (;;) { > value = *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. -- Pawel Jakub Dawidek http://www.wheel.pl pjd@FreeBSD.org http://www.FreeBSD.org FreeBSD committer Am I Evil? Yes, I Am! [-- Attachment #2 --] -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4 (FreeBSD) iD8DBQFGzuaXForvXbEpPzQRArq0AKC5/SuL8uxctj5tvAnblJ+nI0qN7wCePxwB r8unBjbr2PRLARTXynf0gEE= =937F -----END PGP SIGNATURE-----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070824140927.GC14536>
