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