Re: [PATCH] udev enhancements to use kernel event queue

From: Patrick Mochel (mochel@osdl.org)
Date: Thu Jun 12 2003 - 18:34:29 EST


> > + spin_lock(&sequence_lock);
> > + seq = sequence_num++;
> > + spin_unlock(&sequence_lock);
> > +
> > + envp [i++] = scratch;
> > + scratch += sprintf(scratch, "SEQNUM=%ld", seq) + 1;
>
> Nice thinking. It is a shame we need a lock for this, but we don't have
> an atomic_inc_and_return().

Those were my sentiments exactly:

16:21 * mochel searches for atomic_inc_and_read() :)

It seems like the following should work. Would someone mind commenting on
it?

Thanks,

        -pat

===== include/asm/atomic.h 1.4 vs edited =====
--- 1.4/include/asm-i386/atomic.h Mon Feb 4 23:42:13 2002
+++ edited/include/asm/atomic.h Thu Jun 12 16:32:10 2003
@@ -110,6 +110,23 @@
                 :"m" (v->counter));
 }
 
+
+/**
+ * atomic_inc_and_read - increment atomic variable and return new value
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1. Note that the guaranteed
+ * useful range of an atomic_t is only 24 bits.
+ */
+static inline int atomic_inc_and_read(atomic_t *v)
+{
+ __asm__ __volatile__(
+ LOCK "incl %0"
+ :"=m" (v->counter)
+ :"m" (v->counter));
+ return v->counter;
+}
+
 /**
  * atomic_dec - decrement atomic variable
  * @v: pointer of type atomic_t

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Jun 15 2003 - 22:00:35 EST