Russell King <[EMAIL PROTECTED]> wrote:

> These are the constant versions, where the compiler can optimise the
> mask and word offset itself.

So my inclusion of ARM is correct...  Under some circumstances it will write
to the target word when it wouldn't actually make a change:

        static inline int
        ____atomic_test_and_set_bit(unsigned int bit, volatile unsigned long *p)
        {
                unsigned long flags;
                unsigned int res;
                unsigned long mask = 1UL << (bit & 31);

                p += bit >> 5;

                raw_local_irq_save(flags);
                res = *p;
                *p = res | mask;
                raw_local_irq_restore(flags);

                return res & mask;
        }

Remember: *p is volatile.

David
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to