Messages in this thread | | | Date | Tue, 28 Aug 2007 11:40:26 +1000 | From | Nick Piggin <> | Subject | Re: [patch 01/28] Fall back on interrupt disable in cmpxchg8b on 80386 and 80486 |
| |
Mathieu Desnoyers wrote:
> Q: > What's the reason to have cmpxchg64_local on 32 bit architectures? > Without that need all this would just be a few simple defines. > > A: > cmpxchg64_local on 32 bits architectures takes unsigned long long > parameters, but cmpxchg_local only takes longs. Since we have cmpxchg8b > to execute a 8 byte cmpxchg atomically on pentium and +, it makes sense > to provide a flavor of cmpxchg and cmpxchg_local using this instruction. > > Also, for 32 bits architectures lacking the 64 bits atomic cmpxchg, it > makes sense _not_ to define cmpxchg64 while cmpxchg could still be > available. > > Moreover, the fallback for cmpxchg8b on i386 for 386 and 486 is a > different case than cmpxchg (which is only required for 386). Using > different code makes this easier. > > However, cmpxchg64_local will be emulated by disabling interrupts on all > architectures where it is not supported atomically. > > Therefore, we *could* turn cmpxchg64_local into a cmpxchg_local, but it > would make the 386/486 fallbacks ugly, make its design different from > cmpxchg/cmpxchg64 (which really depends on atomic operations and cannot > be emulated) and require the __cmpxchg_local to be expressed as a macro > rather than an inline function so the parameters would not be fixed to > unsigned long long in every case. > > So I think cmpxchg64_local makes sense there, but I am open to > suggestions.
Every new thing like this (especially 64 bit operation on 32 bit architectures) adds a tiny bit more burden for maintainers. Are there any callers? If not, don't add it. It's simple to add if we do get a good reason.
-- SUSE Labs, Novell Inc. - 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/
| |