Re: [PATCH 3/4] relayfs for 2.6.10: locking/lockless implementation

From: Greg KH
Date: Fri Jan 14 2005 - 14:29:12 EST


On Thu, Jan 13, 2005 at 10:04:33PM -0500, Karim Yaghmour wrote:
> +/**
> + * compare_and_store_volatile - self-explicit
> + * @ptr: ptr to the word that will receive the new value
> + * @oval: the value we think is currently in *ptr
> + * @nval: the value *ptr will get if we were right
> + */
> +inline int
> +compare_and_store_volatile(volatile u32 *ptr,
> + u32 oval,
> + u32 nval)
> +{
> + u32 prev;
> +
> + barrier();
> + prev = cmpxchg(ptr, oval, nval);
> + barrier();
> +
> + return (prev == oval);
> +}

Why is this function needed? What's wrong with the "normal" cmpxchg?

> +/**
> + * atomic_set_volatile - atomically set the value in ptr to nval.
> + * @ptr: ptr to the word that will receive the new value
> + * @nval: the new value
> + */
> +inline void
> +atomic_set_volatile(atomic_t *ptr,
> + u32 nval)
> +{
> + barrier();
> + atomic_set(ptr, (int)nval);
> + barrier();
> +}

Same here, what's wrong with the normal atomic_set()?

Same question also goes for the other functions like this in this file.

thanks,

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