Matthew Wilcox <matthew@xxxxxx> wrote: > On Wed, Jul 02, 2008 at 05:59:31PM +0200, Elias Oltmanns wrote: >> > The reason no locks are necessary is that there's no race to mediate. > >> > The checks are only is it set or not ... >> >> I'm not sure whether that is of any consequence. Don't get me wrong, I >> really don't know and you may well be right. But how exactly does >> decrementing from 2 to 1 work? Do we know for sure that there will >> always be at least one bit set so reading that address will reliably >> return a non zero value? > > The assumption we make (and it is believed to be true on all SMP systems) > is that a write to a naturally aligned memory location that is sized <= > sizeof(long) is atomic. That is, a reader will get either the previous > value or the subsequent value, not a mixture. The RCU code relies > heavily on this assumption. Does that mean that where ever I have spin_lock_irqsave(some_lock, flags); var = some_val; spin_unlock_irqrestore(some_lock, flags); I could just as well discard the locking provided that sizeof(var) <= sizeof(long) because the assignment of some_val to var will be atomic anyway? Regards, Elias -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html