On Sat, Mar 25, 2017 at 11:34:32AM -0700, Linus Torvalds wrote: > On Sat, Mar 25, 2017 at 11:28 AM, Linus Torvalds > <torva...@linux-foundation.org> wrote: > > > > Hmm. Sad. The label approach looked like it would match the semantics > > of cmpxchg perfectly, but it's not as optimal as it superficially > > would have seemed. > > Oh, I just noticed that at least your other one didn't mark "success" > as being likely.
10730509 4540256 843776 16114541 f5e36d defconfig-build/vmlinux --- arch/x86/include/asm/cmpxchg.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/cmpxchg.h b/arch/x86/include/asm/cmpxchg.h index fb961db..d347abc 100644 --- a/arch/x86/include/asm/cmpxchg.h +++ b/arch/x86/include/asm/cmpxchg.h @@ -212,8 +212,9 @@ extern void __add_wrong_size(void) default: \ __cmpxchg_wrong_size(); \ } \ + if (unlikely(!success)) \ *_old = __old; \ - success; \ + likely(success); \ }) #define __try_cmpxchg(ptr, pold, new, size) \