Lockless uidinfo.
Attilio Rao
attilio at freebsd.org
Wed Aug 22 12:31:55 PDT 2007
2007/8/21, Pawel Jakub Dawidek <pjd at 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();
}
Thanks,
Attilio
--
Peace can only be achieved by understanding - A. Einstein
More information about the freebsd-arch
mailing list