^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef _ASM_GENERIC_PERCPU_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _ASM_GENERIC_PERCPU_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <linux/compiler.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <linux/threads.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <linux/percpu-defs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #ifdef CONFIG_SMP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * per_cpu_offset() is the offset that has to be added to a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * percpu variable to get to the instance for a certain processor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * Most arches use the __per_cpu_offset array for those offsets but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * some arches have their own ways of determining the offset (x86_64, s390).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #ifndef __per_cpu_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) extern unsigned long __per_cpu_offset[NR_CPUS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define per_cpu_offset(x) (__per_cpu_offset[x])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * Determine the offset for the currently active processor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * An arch may define __my_cpu_offset to provide a more effective
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * means of obtaining the offset to the per cpu variables of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * current processor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #ifndef __my_cpu_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define __my_cpu_offset per_cpu_offset(raw_smp_processor_id())
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #ifdef CONFIG_DEBUG_PREEMPT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define my_cpu_offset per_cpu_offset(smp_processor_id())
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define my_cpu_offset __my_cpu_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * Arch may define arch_raw_cpu_ptr() to provide more efficient address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) * translations for raw_cpu_ptr().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #ifndef arch_raw_cpu_ptr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) extern void setup_per_cpu_areas(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #endif /* SMP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #ifndef PER_CPU_BASE_SECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #ifdef CONFIG_SMP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define PER_CPU_BASE_SECTION ".data..percpu"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define PER_CPU_BASE_SECTION ".data"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #ifndef PER_CPU_ATTRIBUTES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define PER_CPU_ATTRIBUTES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define raw_cpu_generic_read(pcp) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) *raw_cpu_ptr(&(pcp)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define raw_cpu_generic_to_op(pcp, val, op) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) *raw_cpu_ptr(&(pcp)) op val; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define raw_cpu_generic_add_return(pcp, val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) typeof(pcp) *__p = raw_cpu_ptr(&(pcp)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) *__p += val; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) *__p; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define raw_cpu_generic_xchg(pcp, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) typeof(pcp) *__p = raw_cpu_ptr(&(pcp)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) typeof(pcp) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) __ret = *__p; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) *__p = nval; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define raw_cpu_generic_cmpxchg(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) typeof(pcp) *__p = raw_cpu_ptr(&(pcp)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) typeof(pcp) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) __ret = *__p; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) if (__ret == (oval)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) *__p = nval; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) typeof(pcp1) *__p1 = raw_cpu_ptr(&(pcp1)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) typeof(pcp2) *__p2 = raw_cpu_ptr(&(pcp2)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) int __ret = 0; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) if (*__p1 == (oval1) && *__p2 == (oval2)) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) *__p1 = nval1; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) *__p2 = nval2; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) __ret = 1; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) (__ret); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define __this_cpu_generic_read_nopreempt(pcp) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) typeof(pcp) ___ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) preempt_disable_notrace(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) preempt_enable_notrace(); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ___ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define __this_cpu_generic_read_noirq(pcp) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) typeof(pcp) ___ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) unsigned long ___flags; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) raw_local_irq_save(___flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) ___ret = raw_cpu_generic_read(pcp); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) raw_local_irq_restore(___flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) ___ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define this_cpu_generic_read(pcp) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) typeof(pcp) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) if (__native_word(pcp)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) __ret = __this_cpu_generic_read_nopreempt(pcp); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) else \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) __ret = __this_cpu_generic_read_noirq(pcp); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define this_cpu_generic_to_op(pcp, val, op) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) unsigned long __flags; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) raw_local_irq_save(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) raw_cpu_generic_to_op(pcp, val, op); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) raw_local_irq_restore(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define this_cpu_generic_add_return(pcp, val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) typeof(pcp) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) unsigned long __flags; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) raw_local_irq_save(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) __ret = raw_cpu_generic_add_return(pcp, val); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) raw_local_irq_restore(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define this_cpu_generic_xchg(pcp, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) typeof(pcp) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) unsigned long __flags; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) raw_local_irq_save(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) __ret = raw_cpu_generic_xchg(pcp, nval); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) raw_local_irq_restore(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define this_cpu_generic_cmpxchg(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) typeof(pcp) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) unsigned long __flags; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) raw_local_irq_save(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) __ret = raw_cpu_generic_cmpxchg(pcp, oval, nval); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) raw_local_irq_restore(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #define this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) int __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) unsigned long __flags; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) raw_local_irq_save(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) __ret = raw_cpu_generic_cmpxchg_double(pcp1, pcp2, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) oval1, oval2, nval1, nval2); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) raw_local_irq_restore(__flags); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) __ret; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #ifndef raw_cpu_read_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define raw_cpu_read_1(pcp) raw_cpu_generic_read(pcp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #ifndef raw_cpu_read_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define raw_cpu_read_2(pcp) raw_cpu_generic_read(pcp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #ifndef raw_cpu_read_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define raw_cpu_read_4(pcp) raw_cpu_generic_read(pcp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #ifndef raw_cpu_read_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define raw_cpu_read_8(pcp) raw_cpu_generic_read(pcp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #ifndef raw_cpu_write_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define raw_cpu_write_1(pcp, val) raw_cpu_generic_to_op(pcp, val, =)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #ifndef raw_cpu_write_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define raw_cpu_write_2(pcp, val) raw_cpu_generic_to_op(pcp, val, =)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #ifndef raw_cpu_write_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define raw_cpu_write_4(pcp, val) raw_cpu_generic_to_op(pcp, val, =)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #ifndef raw_cpu_write_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) #define raw_cpu_write_8(pcp, val) raw_cpu_generic_to_op(pcp, val, =)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #ifndef raw_cpu_add_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #define raw_cpu_add_1(pcp, val) raw_cpu_generic_to_op(pcp, val, +=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) #ifndef raw_cpu_add_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define raw_cpu_add_2(pcp, val) raw_cpu_generic_to_op(pcp, val, +=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #ifndef raw_cpu_add_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) #define raw_cpu_add_4(pcp, val) raw_cpu_generic_to_op(pcp, val, +=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #ifndef raw_cpu_add_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #define raw_cpu_add_8(pcp, val) raw_cpu_generic_to_op(pcp, val, +=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #ifndef raw_cpu_and_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define raw_cpu_and_1(pcp, val) raw_cpu_generic_to_op(pcp, val, &=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #ifndef raw_cpu_and_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define raw_cpu_and_2(pcp, val) raw_cpu_generic_to_op(pcp, val, &=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #ifndef raw_cpu_and_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #define raw_cpu_and_4(pcp, val) raw_cpu_generic_to_op(pcp, val, &=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #ifndef raw_cpu_and_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) #define raw_cpu_and_8(pcp, val) raw_cpu_generic_to_op(pcp, val, &=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #ifndef raw_cpu_or_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) #define raw_cpu_or_1(pcp, val) raw_cpu_generic_to_op(pcp, val, |=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #ifndef raw_cpu_or_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #define raw_cpu_or_2(pcp, val) raw_cpu_generic_to_op(pcp, val, |=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) #ifndef raw_cpu_or_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #define raw_cpu_or_4(pcp, val) raw_cpu_generic_to_op(pcp, val, |=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) #ifndef raw_cpu_or_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) #define raw_cpu_or_8(pcp, val) raw_cpu_generic_to_op(pcp, val, |=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) #ifndef raw_cpu_add_return_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) #define raw_cpu_add_return_1(pcp, val) raw_cpu_generic_add_return(pcp, val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) #ifndef raw_cpu_add_return_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) #define raw_cpu_add_return_2(pcp, val) raw_cpu_generic_add_return(pcp, val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) #ifndef raw_cpu_add_return_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) #define raw_cpu_add_return_4(pcp, val) raw_cpu_generic_add_return(pcp, val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #ifndef raw_cpu_add_return_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) #define raw_cpu_add_return_8(pcp, val) raw_cpu_generic_add_return(pcp, val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #ifndef raw_cpu_xchg_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) #define raw_cpu_xchg_1(pcp, nval) raw_cpu_generic_xchg(pcp, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) #ifndef raw_cpu_xchg_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) #define raw_cpu_xchg_2(pcp, nval) raw_cpu_generic_xchg(pcp, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) #ifndef raw_cpu_xchg_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) #define raw_cpu_xchg_4(pcp, nval) raw_cpu_generic_xchg(pcp, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #ifndef raw_cpu_xchg_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) #define raw_cpu_xchg_8(pcp, nval) raw_cpu_generic_xchg(pcp, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) #ifndef raw_cpu_cmpxchg_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) #define raw_cpu_cmpxchg_1(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) raw_cpu_generic_cmpxchg(pcp, oval, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) #ifndef raw_cpu_cmpxchg_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) #define raw_cpu_cmpxchg_2(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) raw_cpu_generic_cmpxchg(pcp, oval, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) #ifndef raw_cpu_cmpxchg_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) #define raw_cpu_cmpxchg_4(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) raw_cpu_generic_cmpxchg(pcp, oval, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) #ifndef raw_cpu_cmpxchg_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) #define raw_cpu_cmpxchg_8(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) raw_cpu_generic_cmpxchg(pcp, oval, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) #ifndef raw_cpu_cmpxchg_double_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) #define raw_cpu_cmpxchg_double_1(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) #ifndef raw_cpu_cmpxchg_double_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) #define raw_cpu_cmpxchg_double_2(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) #ifndef raw_cpu_cmpxchg_double_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) #define raw_cpu_cmpxchg_double_4(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) #ifndef raw_cpu_cmpxchg_double_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) #define raw_cpu_cmpxchg_double_8(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) #ifndef this_cpu_read_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) #define this_cpu_read_1(pcp) this_cpu_generic_read(pcp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) #ifndef this_cpu_read_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) #define this_cpu_read_2(pcp) this_cpu_generic_read(pcp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) #ifndef this_cpu_read_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) #define this_cpu_read_4(pcp) this_cpu_generic_read(pcp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) #ifndef this_cpu_read_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) #define this_cpu_read_8(pcp) this_cpu_generic_read(pcp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) #ifndef this_cpu_write_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) #define this_cpu_write_1(pcp, val) this_cpu_generic_to_op(pcp, val, =)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) #ifndef this_cpu_write_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) #define this_cpu_write_2(pcp, val) this_cpu_generic_to_op(pcp, val, =)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) #ifndef this_cpu_write_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) #define this_cpu_write_4(pcp, val) this_cpu_generic_to_op(pcp, val, =)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) #ifndef this_cpu_write_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) #define this_cpu_write_8(pcp, val) this_cpu_generic_to_op(pcp, val, =)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) #ifndef this_cpu_add_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) #define this_cpu_add_1(pcp, val) this_cpu_generic_to_op(pcp, val, +=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) #ifndef this_cpu_add_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) #define this_cpu_add_2(pcp, val) this_cpu_generic_to_op(pcp, val, +=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) #ifndef this_cpu_add_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) #define this_cpu_add_4(pcp, val) this_cpu_generic_to_op(pcp, val, +=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) #ifndef this_cpu_add_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) #define this_cpu_add_8(pcp, val) this_cpu_generic_to_op(pcp, val, +=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) #ifndef this_cpu_and_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) #define this_cpu_and_1(pcp, val) this_cpu_generic_to_op(pcp, val, &=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) #ifndef this_cpu_and_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) #define this_cpu_and_2(pcp, val) this_cpu_generic_to_op(pcp, val, &=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) #ifndef this_cpu_and_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) #define this_cpu_and_4(pcp, val) this_cpu_generic_to_op(pcp, val, &=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) #ifndef this_cpu_and_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) #define this_cpu_and_8(pcp, val) this_cpu_generic_to_op(pcp, val, &=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) #ifndef this_cpu_or_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) #define this_cpu_or_1(pcp, val) this_cpu_generic_to_op(pcp, val, |=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) #ifndef this_cpu_or_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) #define this_cpu_or_2(pcp, val) this_cpu_generic_to_op(pcp, val, |=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) #ifndef this_cpu_or_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) #define this_cpu_or_4(pcp, val) this_cpu_generic_to_op(pcp, val, |=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) #ifndef this_cpu_or_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) #define this_cpu_or_8(pcp, val) this_cpu_generic_to_op(pcp, val, |=)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) #ifndef this_cpu_add_return_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) #define this_cpu_add_return_1(pcp, val) this_cpu_generic_add_return(pcp, val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) #ifndef this_cpu_add_return_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) #define this_cpu_add_return_2(pcp, val) this_cpu_generic_add_return(pcp, val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) #ifndef this_cpu_add_return_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) #define this_cpu_add_return_4(pcp, val) this_cpu_generic_add_return(pcp, val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) #ifndef this_cpu_add_return_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) #define this_cpu_add_return_8(pcp, val) this_cpu_generic_add_return(pcp, val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) #ifndef this_cpu_xchg_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) #define this_cpu_xchg_1(pcp, nval) this_cpu_generic_xchg(pcp, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) #ifndef this_cpu_xchg_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) #define this_cpu_xchg_2(pcp, nval) this_cpu_generic_xchg(pcp, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) #ifndef this_cpu_xchg_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) #define this_cpu_xchg_4(pcp, nval) this_cpu_generic_xchg(pcp, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) #ifndef this_cpu_xchg_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) #define this_cpu_xchg_8(pcp, nval) this_cpu_generic_xchg(pcp, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) #ifndef this_cpu_cmpxchg_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) #define this_cpu_cmpxchg_1(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) this_cpu_generic_cmpxchg(pcp, oval, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) #ifndef this_cpu_cmpxchg_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) #define this_cpu_cmpxchg_2(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) this_cpu_generic_cmpxchg(pcp, oval, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) #ifndef this_cpu_cmpxchg_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) #define this_cpu_cmpxchg_4(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) this_cpu_generic_cmpxchg(pcp, oval, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) #ifndef this_cpu_cmpxchg_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) #define this_cpu_cmpxchg_8(pcp, oval, nval) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) this_cpu_generic_cmpxchg(pcp, oval, nval)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) #ifndef this_cpu_cmpxchg_double_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) #define this_cpu_cmpxchg_double_1(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) #ifndef this_cpu_cmpxchg_double_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) #define this_cpu_cmpxchg_double_2(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) #ifndef this_cpu_cmpxchg_double_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) #define this_cpu_cmpxchg_double_4(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) #ifndef this_cpu_cmpxchg_double_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) #define this_cpu_cmpxchg_double_8(pcp1, pcp2, oval1, oval2, nval1, nval2) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) #endif /* _ASM_GENERIC_PERCPU_H_ */