lkml.org 
[lkml]   [2003]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH] udev enhancements to use kernel event queue

> > + 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/

\
 
 \ /
  Last update: 2005-03-22 13:36    [W:0.099 / U:5.124 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site