Messages in this thread Patch in this message |  | | Date | Thu, 12 Jun 2003 16:34:29 -0700 (PDT) | From | Patrick Mochel <> | Subject | Re: [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/
|  |