Messages in this thread |  | | | Date | Wed, 16 Jan 2008 21:47:16 -0800 | | From | John Hubbard <> | | Subject | Re: Bitops source problem | |
Pravin Nanaware wrote:
> Hi,
>
> I was just going through the include file in the /usr/include/asm/bitops.h
>
> The function description describes it as non-atomic but it seems it is not.
>
> static __inline__ void __change_bit(int nr, volatile void * addr)
> {
> __asm__ __volatile__(
> "btcl %1,%0"
> :"=m" (ADDR)
> :"Ir" (nr));
> }
>
> The kernel version I am using is 2.6.9-42. Is it right or am I missing something ?
>
> Thanks,
> Pravin
>
The bitops.h comments are correct: the btc IA-32 instruction is only
atomic if used with the lock prefix. The function above does not use the
lock prefix, so it is not atomic.
thanks,
John Hubbard
|  |