Messages in this thread | | | Date | Wed, 14 Sep 2005 23:21:06 +0100 | From | Russell King <> | Subject | Re: [PATCH 2/5] atomic: introduce atomic_inc_not_zero |
| |
On Thu, Sep 15, 2005 at 12:10:56AM +0200, Roman Zippel wrote: > Hi, > > On Wed, 14 Sep 2005, Russell King wrote: > > > > do { > > > old = atomic_load_locked(v); > > > if (!old) > > > break; > > > new = old + 1; > > > } while (!atomic_store_lock(v, old, new)); > > > > How do you propose architectures which don't have locked loads implement > > this, where the only atomic instruction is an unconditional atomic swap > > between memory and CPU register? > > #define atomic_store_lock atomic_cmpxchg
No. "unconditional atomic swap" does not mean cmpxchg - it means that atomic_cmpxchg itself would have to be open coded, which is inefficient.
What you're asking architectures to do is:
retry: load operation save interrupts load compare store if equal restore interrupts goto retry if not equal
whereas they could have done the far simpler version of:
save interrupts load operation store restore interrupts
which they do today.
The whole point about architecture specific includes is not to provide a frenzied feeding ground for folk who like to "clean code up" but to allow architectures to do things in the most efficient way for them without polluting the kernel too much.
It seems that aspect is being lost sight of here.
-- Russell King Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/ maintainer of: 2.6 Serial core - 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/
| |