Re: Atomic operations

H. Peter Anvin (hpa@zytor.com)
3 Jun 2002 12:49:36 -0700


Followup to: <3CFBB7DB.831BE453@didntduck.org>
By author: Brian Gerst <bgerst@didntduck.org>
In newsgroup: linux.dev.kernel
>
> int atomic_xadd(int i, atomic_t *v)
> {
> int ret;
> __asm__(LOCK "xaddl %1,%0"
> : "=m" (v->counter), "=r" (ret)
> : "0" (v->counter), "1" (i));
> return ret;
> }
>
> This one only works on 486+, but there are practically no real 386 SMP
> systems.
>

<slaps forehead>

Boy do I feel dumb now.

The only nitpick is that it's probably better coded as:

int atomic_xadd(int i, atomic_t *v)
{
asm volatile(LOCK "xaddl %1,%0"
: "+m" (v->counter), "+r" (i));
return i;
}

-- 
<hpa@transmeta.com> at work, <hpa@zytor.com> in private!
"Unix gives you enough rope to shoot yourself in the foot."
http://www.zytor.com/~hpa/puzzle.txt	<amsp@zytor.com>
-
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/