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

Configure Feed

Select the types of activity you want to include in your feed.

at v4.16-rc2 70 lines 1.7 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _ALPHA_CMPXCHG_H 3#define _ALPHA_CMPXCHG_H 4 5/* 6 * Atomic exchange routines. 7 */ 8 9#define __ASM__MB 10#define ____xchg(type, args...) __xchg ## type ## _local(args) 11#define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args) 12#include <asm/xchg.h> 13 14#define xchg_local(ptr, x) \ 15({ \ 16 __typeof__(*(ptr)) _x_ = (x); \ 17 (__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \ 18 sizeof(*(ptr))); \ 19}) 20 21#define cmpxchg_local(ptr, o, n) \ 22({ \ 23 __typeof__(*(ptr)) _o_ = (o); \ 24 __typeof__(*(ptr)) _n_ = (n); \ 25 (__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \ 26 (unsigned long)_n_, \ 27 sizeof(*(ptr))); \ 28}) 29 30#define cmpxchg64_local(ptr, o, n) \ 31({ \ 32 BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ 33 cmpxchg_local((ptr), (o), (n)); \ 34}) 35 36#ifdef CONFIG_SMP 37#undef __ASM__MB 38#define __ASM__MB "\tmb\n" 39#endif 40#undef ____xchg 41#undef ____cmpxchg 42#define ____xchg(type, args...) __xchg ##type(args) 43#define ____cmpxchg(type, args...) __cmpxchg ##type(args) 44#include <asm/xchg.h> 45 46#define xchg(ptr, x) \ 47({ \ 48 __typeof__(*(ptr)) _x_ = (x); \ 49 (__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_, \ 50 sizeof(*(ptr))); \ 51}) 52 53#define cmpxchg(ptr, o, n) \ 54({ \ 55 __typeof__(*(ptr)) _o_ = (o); \ 56 __typeof__(*(ptr)) _n_ = (n); \ 57 (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ 58 (unsigned long)_n_, sizeof(*(ptr)));\ 59}) 60 61#define cmpxchg64(ptr, o, n) \ 62({ \ 63 BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ 64 cmpxchg((ptr), (o), (n)); \ 65}) 66 67#undef __ASM__MB 68#undef ____cmpxchg 69 70#endif /* _ALPHA_CMPXCHG_H */