Messages in this thread | | | From | Andreas Schwab <> | Subject | Re: set_bit() is broken on i386? | Date | Sat, 21 Jan 2006 02:49:53 +0100 |
| |
Trond Myklebust <trond.myklebust@fys.uio.no> writes:
> On Fri, 2006-01-20 at 19:53 -0500, Chuck Ebbert wrote: > >> #define ADDR (*(volatile long *) addr) >> static inline void set_bit(int nr, volatile unsigned long * addr) >> { >> __asm__ __volatile__( "lock ; " >> "btsl %1,%0" >> :"=m" (ADDR) >> :"Ir" (nr)); >> } > > The asm needs a memory clobber in order to avoid reordering with the > assignment to b[1]:
Check out 2.6.16-rc1, this has already been fixed.
Andreas.
-- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." - 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/
| |