Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Add cmpxchg64 and cmpxchg64_local to alpha

Make sure that at least cmpxchg64_local is available on all architectures to use
for unsigned long long values.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Mathieu Desnoyers and committed by
Linus Torvalds
a259b242 068fbad2

+13 -2
+13 -2
include/asm-alpha/system.h
··· 681 681 return old; 682 682 } 683 683 684 - #define cmpxchg(ptr,o,n) \ 684 + #define cmpxchg(ptr, o, n) \ 685 685 ({ \ 686 686 __typeof__(*(ptr)) _o_ = (o); \ 687 687 __typeof__(*(ptr)) _n_ = (n); \ 688 688 (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ 689 689 (unsigned long)_n_, sizeof(*(ptr))); \ 690 + }) 691 + #define cmpxchg64(ptr, o, n) \ 692 + ({ \ 693 + BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ 694 + cmpxchg((ptr), (o), (n)); \ 690 695 }) 691 696 692 697 static inline unsigned long ··· 808 803 return old; 809 804 } 810 805 811 - #define cmpxchg_local(ptr,o,n) \ 806 + #define cmpxchg_local(ptr, o, n) \ 812 807 ({ \ 813 808 __typeof__(*(ptr)) _o_ = (o); \ 814 809 __typeof__(*(ptr)) _n_ = (n); \ 815 810 (__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \ 816 811 (unsigned long)_n_, sizeof(*(ptr))); \ 817 812 }) 813 + #define cmpxchg64_local(ptr, o, n) \ 814 + ({ \ 815 + BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ 816 + cmpxchg_local((ptr), (o), (n)); \ 817 + }) 818 + 818 819 819 820 #endif /* __ASSEMBLY__ */ 820 821