18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _ASM_GENERIC_PERCPU_H_ 38c2ecf20Sopenharmony_ci#define _ASM_GENERIC_PERCPU_H_ 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <linux/compiler.h> 68c2ecf20Sopenharmony_ci#include <linux/threads.h> 78c2ecf20Sopenharmony_ci#include <linux/percpu-defs.h> 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifdef CONFIG_SMP 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci/* 128c2ecf20Sopenharmony_ci * per_cpu_offset() is the offset that has to be added to a 138c2ecf20Sopenharmony_ci * percpu variable to get to the instance for a certain processor. 148c2ecf20Sopenharmony_ci * 158c2ecf20Sopenharmony_ci * Most arches use the __per_cpu_offset array for those offsets but 168c2ecf20Sopenharmony_ci * some arches have their own ways of determining the offset (x86_64, s390). 178c2ecf20Sopenharmony_ci */ 188c2ecf20Sopenharmony_ci#ifndef __per_cpu_offset 198c2ecf20Sopenharmony_ciextern unsigned long __per_cpu_offset[NR_CPUS]; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#define per_cpu_offset(x) (__per_cpu_offset[x]) 228c2ecf20Sopenharmony_ci#endif 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci/* 258c2ecf20Sopenharmony_ci * Determine the offset for the currently active processor. 268c2ecf20Sopenharmony_ci * An arch may define __my_cpu_offset to provide a more effective 278c2ecf20Sopenharmony_ci * means of obtaining the offset to the per cpu variables of the 288c2ecf20Sopenharmony_ci * current processor. 298c2ecf20Sopenharmony_ci */ 308c2ecf20Sopenharmony_ci#ifndef __my_cpu_offset 318c2ecf20Sopenharmony_ci#define __my_cpu_offset per_cpu_offset(raw_smp_processor_id()) 328c2ecf20Sopenharmony_ci#endif 338c2ecf20Sopenharmony_ci#ifdef CONFIG_DEBUG_PREEMPT 348c2ecf20Sopenharmony_ci#define my_cpu_offset per_cpu_offset(smp_processor_id()) 358c2ecf20Sopenharmony_ci#else 368c2ecf20Sopenharmony_ci#define my_cpu_offset __my_cpu_offset 378c2ecf20Sopenharmony_ci#endif 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci/* 408c2ecf20Sopenharmony_ci * Arch may define arch_raw_cpu_ptr() to provide more efficient address 418c2ecf20Sopenharmony_ci * translations for raw_cpu_ptr(). 428c2ecf20Sopenharmony_ci */ 438c2ecf20Sopenharmony_ci#ifndef arch_raw_cpu_ptr 448c2ecf20Sopenharmony_ci#define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset) 458c2ecf20Sopenharmony_ci#endif 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci#ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA 488c2ecf20Sopenharmony_ciextern void setup_per_cpu_areas(void); 498c2ecf20Sopenharmony_ci#endif 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci#endif /* SMP */ 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci#ifndef PER_CPU_BASE_SECTION 548c2ecf20Sopenharmony_ci#ifdef CONFIG_SMP 558c2ecf20Sopenharmony_ci#define PER_CPU_BASE_SECTION ".data..percpu" 568c2ecf20Sopenharmony_ci#else 578c2ecf20Sopenharmony_ci#define PER_CPU_BASE_SECTION ".data" 588c2ecf20Sopenharmony_ci#endif 598c2ecf20Sopenharmony_ci#endif 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci#ifndef PER_CPU_ATTRIBUTES 628c2ecf20Sopenharmony_ci#define PER_CPU_ATTRIBUTES 638c2ecf20Sopenharmony_ci#endif 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci#define raw_cpu_generic_read(pcp) \ 668c2ecf20Sopenharmony_ci({ \ 678c2ecf20Sopenharmony_ci *raw_cpu_ptr(&(pcp)); \ 688c2ecf20Sopenharmony_ci}) 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci#define raw_cpu_generic_to_op(pcp, val, op) \ 718c2ecf20Sopenharmony_cido { \ 728c2ecf20Sopenharmony_ci *raw_cpu_ptr(&(pcp)) op val; \ 738c2ecf20Sopenharmony_ci} while (0) 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci#define raw_cpu_generic_add_return(pcp, val) \ 768c2ecf20Sopenharmony_ci({ \ 778c2ecf20Sopenharmony_ci typeof(pcp) *__p = raw_cpu_ptr(&(pcp)); \ 788c2ecf20Sopenharmony_ci \ 798c2ecf20Sopenharmony_ci *__p += val; \ 808c2ecf20Sopenharmony_ci *__p; \ 818c2ecf20Sopenharmony_ci}) 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci#define raw_cpu_generic_xchg(pcp, nval) \ 848c2ecf20Sopenharmony_ci({ \ 858c2ecf20Sopenharmony_ci typeof(pcp) *__p = raw_cpu_ptr(&(pcp)); \ 868c2ecf20Sopenharmony_ci typeof(pcp) __ret; \ 878c2ecf20Sopenharmony_ci __ret = *__p; \ 888c2ecf20Sopenharmony_ci *__p = nval; \ 898c2ecf20Sopenharmony_ci __ret; \ 908c2ecf20Sopenharmony_ci}) 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci#define raw_cpu_generic_cmpxchg(pcp, oval, nval) \ 938c2ecf20Sopenharmony_ci({ \ 948c2ecf20Sopenharmony_ci typeof(pcp) *__p = raw_cpu_ptr(&(pcp)); \ 958c2ecf20Sopenharmony_ci typeof(pcp) __ret; \ 968c2ecf20Sopenharmony_ci __ret = *__p; \ 978c2ecf20Sopenharmony_ci if (__ret == (oval)) \ 988c2ecf20Sopenharmony_ci *__p = nval; \ 998c2ecf20Sopenharmony_ci __ret; \ 1008c2ecf20Sopenharmony_ci}) 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ci#define raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 1038c2ecf20Sopenharmony_ci({ \ 1048c2ecf20Sopenharmony_ci typeof(pcp1) *__p1 = raw_cpu_ptr(&(pcp1)); \ 1058c2ecf20Sopenharmony_ci typeof(pcp2) *__p2 = raw_cpu_ptr(&(pcp2)); \ 1068c2ecf20Sopenharmony_ci int __ret = 0; \ 1078c2ecf20Sopenharmony_ci if (*__p1 == (oval1) && *__p2 == (oval2)) { \ 1088c2ecf20Sopenharmony_ci *__p1 = nval1; \ 1098c2ecf20Sopenharmony_ci *__p2 = nval2; \ 1108c2ecf20Sopenharmony_ci __ret = 1; \ 1118c2ecf20Sopenharmony_ci } \ 1128c2ecf20Sopenharmony_ci (__ret); \ 1138c2ecf20Sopenharmony_ci}) 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_ci#define __this_cpu_generic_read_nopreempt(pcp) \ 1168c2ecf20Sopenharmony_ci({ \ 1178c2ecf20Sopenharmony_ci typeof(pcp) ___ret; \ 1188c2ecf20Sopenharmony_ci preempt_disable_notrace(); \ 1198c2ecf20Sopenharmony_ci ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \ 1208c2ecf20Sopenharmony_ci preempt_enable_notrace(); \ 1218c2ecf20Sopenharmony_ci ___ret; \ 1228c2ecf20Sopenharmony_ci}) 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_ci#define __this_cpu_generic_read_noirq(pcp) \ 1258c2ecf20Sopenharmony_ci({ \ 1268c2ecf20Sopenharmony_ci typeof(pcp) ___ret; \ 1278c2ecf20Sopenharmony_ci unsigned long ___flags; \ 1288c2ecf20Sopenharmony_ci raw_local_irq_save(___flags); \ 1298c2ecf20Sopenharmony_ci ___ret = raw_cpu_generic_read(pcp); \ 1308c2ecf20Sopenharmony_ci raw_local_irq_restore(___flags); \ 1318c2ecf20Sopenharmony_ci ___ret; \ 1328c2ecf20Sopenharmony_ci}) 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci#define this_cpu_generic_read(pcp) \ 1358c2ecf20Sopenharmony_ci({ \ 1368c2ecf20Sopenharmony_ci typeof(pcp) __ret; \ 1378c2ecf20Sopenharmony_ci if (__native_word(pcp)) \ 1388c2ecf20Sopenharmony_ci __ret = __this_cpu_generic_read_nopreempt(pcp); \ 1398c2ecf20Sopenharmony_ci else \ 1408c2ecf20Sopenharmony_ci __ret = __this_cpu_generic_read_noirq(pcp); \ 1418c2ecf20Sopenharmony_ci __ret; \ 1428c2ecf20Sopenharmony_ci}) 1438c2ecf20Sopenharmony_ci 1448c2ecf20Sopenharmony_ci#define this_cpu_generic_to_op(pcp, val, op) \ 1458c2ecf20Sopenharmony_cido { \ 1468c2ecf20Sopenharmony_ci unsigned long __flags; \ 1478c2ecf20Sopenharmony_ci raw_local_irq_save(__flags); \ 1488c2ecf20Sopenharmony_ci raw_cpu_generic_to_op(pcp, val, op); \ 1498c2ecf20Sopenharmony_ci raw_local_irq_restore(__flags); \ 1508c2ecf20Sopenharmony_ci} while (0) 1518c2ecf20Sopenharmony_ci 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_ci#define this_cpu_generic_add_return(pcp, val) \ 1548c2ecf20Sopenharmony_ci({ \ 1558c2ecf20Sopenharmony_ci typeof(pcp) __ret; \ 1568c2ecf20Sopenharmony_ci unsigned long __flags; \ 1578c2ecf20Sopenharmony_ci raw_local_irq_save(__flags); \ 1588c2ecf20Sopenharmony_ci __ret = raw_cpu_generic_add_return(pcp, val); \ 1598c2ecf20Sopenharmony_ci raw_local_irq_restore(__flags); \ 1608c2ecf20Sopenharmony_ci __ret; \ 1618c2ecf20Sopenharmony_ci}) 1628c2ecf20Sopenharmony_ci 1638c2ecf20Sopenharmony_ci#define this_cpu_generic_xchg(pcp, nval) \ 1648c2ecf20Sopenharmony_ci({ \ 1658c2ecf20Sopenharmony_ci typeof(pcp) __ret; \ 1668c2ecf20Sopenharmony_ci unsigned long __flags; \ 1678c2ecf20Sopenharmony_ci raw_local_irq_save(__flags); \ 1688c2ecf20Sopenharmony_ci __ret = raw_cpu_generic_xchg(pcp, nval); \ 1698c2ecf20Sopenharmony_ci raw_local_irq_restore(__flags); \ 1708c2ecf20Sopenharmony_ci __ret; \ 1718c2ecf20Sopenharmony_ci}) 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ci#define this_cpu_generic_cmpxchg(pcp, oval, nval) \ 1748c2ecf20Sopenharmony_ci({ \ 1758c2ecf20Sopenharmony_ci typeof(pcp) __ret; \ 1768c2ecf20Sopenharmony_ci unsigned long __flags; \ 1778c2ecf20Sopenharmony_ci raw_local_irq_save(__flags); \ 1788c2ecf20Sopenharmony_ci __ret = raw_cpu_generic_cmpxchg(pcp, oval, nval); \ 1798c2ecf20Sopenharmony_ci raw_local_irq_restore(__flags); \ 1808c2ecf20Sopenharmony_ci __ret; \ 1818c2ecf20Sopenharmony_ci}) 1828c2ecf20Sopenharmony_ci 1838c2ecf20Sopenharmony_ci#define this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 1848c2ecf20Sopenharmony_ci({ \ 1858c2ecf20Sopenharmony_ci int __ret; \ 1868c2ecf20Sopenharmony_ci unsigned long __flags; \ 1878c2ecf20Sopenharmony_ci raw_local_irq_save(__flags); \ 1888c2ecf20Sopenharmony_ci __ret = raw_cpu_generic_cmpxchg_double(pcp1, pcp2, \ 1898c2ecf20Sopenharmony_ci oval1, oval2, nval1, nval2); \ 1908c2ecf20Sopenharmony_ci raw_local_irq_restore(__flags); \ 1918c2ecf20Sopenharmony_ci __ret; \ 1928c2ecf20Sopenharmony_ci}) 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci#ifndef raw_cpu_read_1 1958c2ecf20Sopenharmony_ci#define raw_cpu_read_1(pcp) raw_cpu_generic_read(pcp) 1968c2ecf20Sopenharmony_ci#endif 1978c2ecf20Sopenharmony_ci#ifndef raw_cpu_read_2 1988c2ecf20Sopenharmony_ci#define raw_cpu_read_2(pcp) raw_cpu_generic_read(pcp) 1998c2ecf20Sopenharmony_ci#endif 2008c2ecf20Sopenharmony_ci#ifndef raw_cpu_read_4 2018c2ecf20Sopenharmony_ci#define raw_cpu_read_4(pcp) raw_cpu_generic_read(pcp) 2028c2ecf20Sopenharmony_ci#endif 2038c2ecf20Sopenharmony_ci#ifndef raw_cpu_read_8 2048c2ecf20Sopenharmony_ci#define raw_cpu_read_8(pcp) raw_cpu_generic_read(pcp) 2058c2ecf20Sopenharmony_ci#endif 2068c2ecf20Sopenharmony_ci 2078c2ecf20Sopenharmony_ci#ifndef raw_cpu_write_1 2088c2ecf20Sopenharmony_ci#define raw_cpu_write_1(pcp, val) raw_cpu_generic_to_op(pcp, val, =) 2098c2ecf20Sopenharmony_ci#endif 2108c2ecf20Sopenharmony_ci#ifndef raw_cpu_write_2 2118c2ecf20Sopenharmony_ci#define raw_cpu_write_2(pcp, val) raw_cpu_generic_to_op(pcp, val, =) 2128c2ecf20Sopenharmony_ci#endif 2138c2ecf20Sopenharmony_ci#ifndef raw_cpu_write_4 2148c2ecf20Sopenharmony_ci#define raw_cpu_write_4(pcp, val) raw_cpu_generic_to_op(pcp, val, =) 2158c2ecf20Sopenharmony_ci#endif 2168c2ecf20Sopenharmony_ci#ifndef raw_cpu_write_8 2178c2ecf20Sopenharmony_ci#define raw_cpu_write_8(pcp, val) raw_cpu_generic_to_op(pcp, val, =) 2188c2ecf20Sopenharmony_ci#endif 2198c2ecf20Sopenharmony_ci 2208c2ecf20Sopenharmony_ci#ifndef raw_cpu_add_1 2218c2ecf20Sopenharmony_ci#define raw_cpu_add_1(pcp, val) raw_cpu_generic_to_op(pcp, val, +=) 2228c2ecf20Sopenharmony_ci#endif 2238c2ecf20Sopenharmony_ci#ifndef raw_cpu_add_2 2248c2ecf20Sopenharmony_ci#define raw_cpu_add_2(pcp, val) raw_cpu_generic_to_op(pcp, val, +=) 2258c2ecf20Sopenharmony_ci#endif 2268c2ecf20Sopenharmony_ci#ifndef raw_cpu_add_4 2278c2ecf20Sopenharmony_ci#define raw_cpu_add_4(pcp, val) raw_cpu_generic_to_op(pcp, val, +=) 2288c2ecf20Sopenharmony_ci#endif 2298c2ecf20Sopenharmony_ci#ifndef raw_cpu_add_8 2308c2ecf20Sopenharmony_ci#define raw_cpu_add_8(pcp, val) raw_cpu_generic_to_op(pcp, val, +=) 2318c2ecf20Sopenharmony_ci#endif 2328c2ecf20Sopenharmony_ci 2338c2ecf20Sopenharmony_ci#ifndef raw_cpu_and_1 2348c2ecf20Sopenharmony_ci#define raw_cpu_and_1(pcp, val) raw_cpu_generic_to_op(pcp, val, &=) 2358c2ecf20Sopenharmony_ci#endif 2368c2ecf20Sopenharmony_ci#ifndef raw_cpu_and_2 2378c2ecf20Sopenharmony_ci#define raw_cpu_and_2(pcp, val) raw_cpu_generic_to_op(pcp, val, &=) 2388c2ecf20Sopenharmony_ci#endif 2398c2ecf20Sopenharmony_ci#ifndef raw_cpu_and_4 2408c2ecf20Sopenharmony_ci#define raw_cpu_and_4(pcp, val) raw_cpu_generic_to_op(pcp, val, &=) 2418c2ecf20Sopenharmony_ci#endif 2428c2ecf20Sopenharmony_ci#ifndef raw_cpu_and_8 2438c2ecf20Sopenharmony_ci#define raw_cpu_and_8(pcp, val) raw_cpu_generic_to_op(pcp, val, &=) 2448c2ecf20Sopenharmony_ci#endif 2458c2ecf20Sopenharmony_ci 2468c2ecf20Sopenharmony_ci#ifndef raw_cpu_or_1 2478c2ecf20Sopenharmony_ci#define raw_cpu_or_1(pcp, val) raw_cpu_generic_to_op(pcp, val, |=) 2488c2ecf20Sopenharmony_ci#endif 2498c2ecf20Sopenharmony_ci#ifndef raw_cpu_or_2 2508c2ecf20Sopenharmony_ci#define raw_cpu_or_2(pcp, val) raw_cpu_generic_to_op(pcp, val, |=) 2518c2ecf20Sopenharmony_ci#endif 2528c2ecf20Sopenharmony_ci#ifndef raw_cpu_or_4 2538c2ecf20Sopenharmony_ci#define raw_cpu_or_4(pcp, val) raw_cpu_generic_to_op(pcp, val, |=) 2548c2ecf20Sopenharmony_ci#endif 2558c2ecf20Sopenharmony_ci#ifndef raw_cpu_or_8 2568c2ecf20Sopenharmony_ci#define raw_cpu_or_8(pcp, val) raw_cpu_generic_to_op(pcp, val, |=) 2578c2ecf20Sopenharmony_ci#endif 2588c2ecf20Sopenharmony_ci 2598c2ecf20Sopenharmony_ci#ifndef raw_cpu_add_return_1 2608c2ecf20Sopenharmony_ci#define raw_cpu_add_return_1(pcp, val) raw_cpu_generic_add_return(pcp, val) 2618c2ecf20Sopenharmony_ci#endif 2628c2ecf20Sopenharmony_ci#ifndef raw_cpu_add_return_2 2638c2ecf20Sopenharmony_ci#define raw_cpu_add_return_2(pcp, val) raw_cpu_generic_add_return(pcp, val) 2648c2ecf20Sopenharmony_ci#endif 2658c2ecf20Sopenharmony_ci#ifndef raw_cpu_add_return_4 2668c2ecf20Sopenharmony_ci#define raw_cpu_add_return_4(pcp, val) raw_cpu_generic_add_return(pcp, val) 2678c2ecf20Sopenharmony_ci#endif 2688c2ecf20Sopenharmony_ci#ifndef raw_cpu_add_return_8 2698c2ecf20Sopenharmony_ci#define raw_cpu_add_return_8(pcp, val) raw_cpu_generic_add_return(pcp, val) 2708c2ecf20Sopenharmony_ci#endif 2718c2ecf20Sopenharmony_ci 2728c2ecf20Sopenharmony_ci#ifndef raw_cpu_xchg_1 2738c2ecf20Sopenharmony_ci#define raw_cpu_xchg_1(pcp, nval) raw_cpu_generic_xchg(pcp, nval) 2748c2ecf20Sopenharmony_ci#endif 2758c2ecf20Sopenharmony_ci#ifndef raw_cpu_xchg_2 2768c2ecf20Sopenharmony_ci#define raw_cpu_xchg_2(pcp, nval) raw_cpu_generic_xchg(pcp, nval) 2778c2ecf20Sopenharmony_ci#endif 2788c2ecf20Sopenharmony_ci#ifndef raw_cpu_xchg_4 2798c2ecf20Sopenharmony_ci#define raw_cpu_xchg_4(pcp, nval) raw_cpu_generic_xchg(pcp, nval) 2808c2ecf20Sopenharmony_ci#endif 2818c2ecf20Sopenharmony_ci#ifndef raw_cpu_xchg_8 2828c2ecf20Sopenharmony_ci#define raw_cpu_xchg_8(pcp, nval) raw_cpu_generic_xchg(pcp, nval) 2838c2ecf20Sopenharmony_ci#endif 2848c2ecf20Sopenharmony_ci 2858c2ecf20Sopenharmony_ci#ifndef raw_cpu_cmpxchg_1 2868c2ecf20Sopenharmony_ci#define raw_cpu_cmpxchg_1(pcp, oval, nval) \ 2878c2ecf20Sopenharmony_ci raw_cpu_generic_cmpxchg(pcp, oval, nval) 2888c2ecf20Sopenharmony_ci#endif 2898c2ecf20Sopenharmony_ci#ifndef raw_cpu_cmpxchg_2 2908c2ecf20Sopenharmony_ci#define raw_cpu_cmpxchg_2(pcp, oval, nval) \ 2918c2ecf20Sopenharmony_ci raw_cpu_generic_cmpxchg(pcp, oval, nval) 2928c2ecf20Sopenharmony_ci#endif 2938c2ecf20Sopenharmony_ci#ifndef raw_cpu_cmpxchg_4 2948c2ecf20Sopenharmony_ci#define raw_cpu_cmpxchg_4(pcp, oval, nval) \ 2958c2ecf20Sopenharmony_ci raw_cpu_generic_cmpxchg(pcp, oval, nval) 2968c2ecf20Sopenharmony_ci#endif 2978c2ecf20Sopenharmony_ci#ifndef raw_cpu_cmpxchg_8 2988c2ecf20Sopenharmony_ci#define raw_cpu_cmpxchg_8(pcp, oval, nval) \ 2998c2ecf20Sopenharmony_ci raw_cpu_generic_cmpxchg(pcp, oval, nval) 3008c2ecf20Sopenharmony_ci#endif 3018c2ecf20Sopenharmony_ci 3028c2ecf20Sopenharmony_ci#ifndef raw_cpu_cmpxchg_double_1 3038c2ecf20Sopenharmony_ci#define raw_cpu_cmpxchg_double_1(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 3048c2ecf20Sopenharmony_ci raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) 3058c2ecf20Sopenharmony_ci#endif 3068c2ecf20Sopenharmony_ci#ifndef raw_cpu_cmpxchg_double_2 3078c2ecf20Sopenharmony_ci#define raw_cpu_cmpxchg_double_2(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 3088c2ecf20Sopenharmony_ci raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) 3098c2ecf20Sopenharmony_ci#endif 3108c2ecf20Sopenharmony_ci#ifndef raw_cpu_cmpxchg_double_4 3118c2ecf20Sopenharmony_ci#define raw_cpu_cmpxchg_double_4(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 3128c2ecf20Sopenharmony_ci raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) 3138c2ecf20Sopenharmony_ci#endif 3148c2ecf20Sopenharmony_ci#ifndef raw_cpu_cmpxchg_double_8 3158c2ecf20Sopenharmony_ci#define raw_cpu_cmpxchg_double_8(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 3168c2ecf20Sopenharmony_ci raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) 3178c2ecf20Sopenharmony_ci#endif 3188c2ecf20Sopenharmony_ci 3198c2ecf20Sopenharmony_ci#ifndef this_cpu_read_1 3208c2ecf20Sopenharmony_ci#define this_cpu_read_1(pcp) this_cpu_generic_read(pcp) 3218c2ecf20Sopenharmony_ci#endif 3228c2ecf20Sopenharmony_ci#ifndef this_cpu_read_2 3238c2ecf20Sopenharmony_ci#define this_cpu_read_2(pcp) this_cpu_generic_read(pcp) 3248c2ecf20Sopenharmony_ci#endif 3258c2ecf20Sopenharmony_ci#ifndef this_cpu_read_4 3268c2ecf20Sopenharmony_ci#define this_cpu_read_4(pcp) this_cpu_generic_read(pcp) 3278c2ecf20Sopenharmony_ci#endif 3288c2ecf20Sopenharmony_ci#ifndef this_cpu_read_8 3298c2ecf20Sopenharmony_ci#define this_cpu_read_8(pcp) this_cpu_generic_read(pcp) 3308c2ecf20Sopenharmony_ci#endif 3318c2ecf20Sopenharmony_ci 3328c2ecf20Sopenharmony_ci#ifndef this_cpu_write_1 3338c2ecf20Sopenharmony_ci#define this_cpu_write_1(pcp, val) this_cpu_generic_to_op(pcp, val, =) 3348c2ecf20Sopenharmony_ci#endif 3358c2ecf20Sopenharmony_ci#ifndef this_cpu_write_2 3368c2ecf20Sopenharmony_ci#define this_cpu_write_2(pcp, val) this_cpu_generic_to_op(pcp, val, =) 3378c2ecf20Sopenharmony_ci#endif 3388c2ecf20Sopenharmony_ci#ifndef this_cpu_write_4 3398c2ecf20Sopenharmony_ci#define this_cpu_write_4(pcp, val) this_cpu_generic_to_op(pcp, val, =) 3408c2ecf20Sopenharmony_ci#endif 3418c2ecf20Sopenharmony_ci#ifndef this_cpu_write_8 3428c2ecf20Sopenharmony_ci#define this_cpu_write_8(pcp, val) this_cpu_generic_to_op(pcp, val, =) 3438c2ecf20Sopenharmony_ci#endif 3448c2ecf20Sopenharmony_ci 3458c2ecf20Sopenharmony_ci#ifndef this_cpu_add_1 3468c2ecf20Sopenharmony_ci#define this_cpu_add_1(pcp, val) this_cpu_generic_to_op(pcp, val, +=) 3478c2ecf20Sopenharmony_ci#endif 3488c2ecf20Sopenharmony_ci#ifndef this_cpu_add_2 3498c2ecf20Sopenharmony_ci#define this_cpu_add_2(pcp, val) this_cpu_generic_to_op(pcp, val, +=) 3508c2ecf20Sopenharmony_ci#endif 3518c2ecf20Sopenharmony_ci#ifndef this_cpu_add_4 3528c2ecf20Sopenharmony_ci#define this_cpu_add_4(pcp, val) this_cpu_generic_to_op(pcp, val, +=) 3538c2ecf20Sopenharmony_ci#endif 3548c2ecf20Sopenharmony_ci#ifndef this_cpu_add_8 3558c2ecf20Sopenharmony_ci#define this_cpu_add_8(pcp, val) this_cpu_generic_to_op(pcp, val, +=) 3568c2ecf20Sopenharmony_ci#endif 3578c2ecf20Sopenharmony_ci 3588c2ecf20Sopenharmony_ci#ifndef this_cpu_and_1 3598c2ecf20Sopenharmony_ci#define this_cpu_and_1(pcp, val) this_cpu_generic_to_op(pcp, val, &=) 3608c2ecf20Sopenharmony_ci#endif 3618c2ecf20Sopenharmony_ci#ifndef this_cpu_and_2 3628c2ecf20Sopenharmony_ci#define this_cpu_and_2(pcp, val) this_cpu_generic_to_op(pcp, val, &=) 3638c2ecf20Sopenharmony_ci#endif 3648c2ecf20Sopenharmony_ci#ifndef this_cpu_and_4 3658c2ecf20Sopenharmony_ci#define this_cpu_and_4(pcp, val) this_cpu_generic_to_op(pcp, val, &=) 3668c2ecf20Sopenharmony_ci#endif 3678c2ecf20Sopenharmony_ci#ifndef this_cpu_and_8 3688c2ecf20Sopenharmony_ci#define this_cpu_and_8(pcp, val) this_cpu_generic_to_op(pcp, val, &=) 3698c2ecf20Sopenharmony_ci#endif 3708c2ecf20Sopenharmony_ci 3718c2ecf20Sopenharmony_ci#ifndef this_cpu_or_1 3728c2ecf20Sopenharmony_ci#define this_cpu_or_1(pcp, val) this_cpu_generic_to_op(pcp, val, |=) 3738c2ecf20Sopenharmony_ci#endif 3748c2ecf20Sopenharmony_ci#ifndef this_cpu_or_2 3758c2ecf20Sopenharmony_ci#define this_cpu_or_2(pcp, val) this_cpu_generic_to_op(pcp, val, |=) 3768c2ecf20Sopenharmony_ci#endif 3778c2ecf20Sopenharmony_ci#ifndef this_cpu_or_4 3788c2ecf20Sopenharmony_ci#define this_cpu_or_4(pcp, val) this_cpu_generic_to_op(pcp, val, |=) 3798c2ecf20Sopenharmony_ci#endif 3808c2ecf20Sopenharmony_ci#ifndef this_cpu_or_8 3818c2ecf20Sopenharmony_ci#define this_cpu_or_8(pcp, val) this_cpu_generic_to_op(pcp, val, |=) 3828c2ecf20Sopenharmony_ci#endif 3838c2ecf20Sopenharmony_ci 3848c2ecf20Sopenharmony_ci#ifndef this_cpu_add_return_1 3858c2ecf20Sopenharmony_ci#define this_cpu_add_return_1(pcp, val) this_cpu_generic_add_return(pcp, val) 3868c2ecf20Sopenharmony_ci#endif 3878c2ecf20Sopenharmony_ci#ifndef this_cpu_add_return_2 3888c2ecf20Sopenharmony_ci#define this_cpu_add_return_2(pcp, val) this_cpu_generic_add_return(pcp, val) 3898c2ecf20Sopenharmony_ci#endif 3908c2ecf20Sopenharmony_ci#ifndef this_cpu_add_return_4 3918c2ecf20Sopenharmony_ci#define this_cpu_add_return_4(pcp, val) this_cpu_generic_add_return(pcp, val) 3928c2ecf20Sopenharmony_ci#endif 3938c2ecf20Sopenharmony_ci#ifndef this_cpu_add_return_8 3948c2ecf20Sopenharmony_ci#define this_cpu_add_return_8(pcp, val) this_cpu_generic_add_return(pcp, val) 3958c2ecf20Sopenharmony_ci#endif 3968c2ecf20Sopenharmony_ci 3978c2ecf20Sopenharmony_ci#ifndef this_cpu_xchg_1 3988c2ecf20Sopenharmony_ci#define this_cpu_xchg_1(pcp, nval) this_cpu_generic_xchg(pcp, nval) 3998c2ecf20Sopenharmony_ci#endif 4008c2ecf20Sopenharmony_ci#ifndef this_cpu_xchg_2 4018c2ecf20Sopenharmony_ci#define this_cpu_xchg_2(pcp, nval) this_cpu_generic_xchg(pcp, nval) 4028c2ecf20Sopenharmony_ci#endif 4038c2ecf20Sopenharmony_ci#ifndef this_cpu_xchg_4 4048c2ecf20Sopenharmony_ci#define this_cpu_xchg_4(pcp, nval) this_cpu_generic_xchg(pcp, nval) 4058c2ecf20Sopenharmony_ci#endif 4068c2ecf20Sopenharmony_ci#ifndef this_cpu_xchg_8 4078c2ecf20Sopenharmony_ci#define this_cpu_xchg_8(pcp, nval) this_cpu_generic_xchg(pcp, nval) 4088c2ecf20Sopenharmony_ci#endif 4098c2ecf20Sopenharmony_ci 4108c2ecf20Sopenharmony_ci#ifndef this_cpu_cmpxchg_1 4118c2ecf20Sopenharmony_ci#define this_cpu_cmpxchg_1(pcp, oval, nval) \ 4128c2ecf20Sopenharmony_ci this_cpu_generic_cmpxchg(pcp, oval, nval) 4138c2ecf20Sopenharmony_ci#endif 4148c2ecf20Sopenharmony_ci#ifndef this_cpu_cmpxchg_2 4158c2ecf20Sopenharmony_ci#define this_cpu_cmpxchg_2(pcp, oval, nval) \ 4168c2ecf20Sopenharmony_ci this_cpu_generic_cmpxchg(pcp, oval, nval) 4178c2ecf20Sopenharmony_ci#endif 4188c2ecf20Sopenharmony_ci#ifndef this_cpu_cmpxchg_4 4198c2ecf20Sopenharmony_ci#define this_cpu_cmpxchg_4(pcp, oval, nval) \ 4208c2ecf20Sopenharmony_ci this_cpu_generic_cmpxchg(pcp, oval, nval) 4218c2ecf20Sopenharmony_ci#endif 4228c2ecf20Sopenharmony_ci#ifndef this_cpu_cmpxchg_8 4238c2ecf20Sopenharmony_ci#define this_cpu_cmpxchg_8(pcp, oval, nval) \ 4248c2ecf20Sopenharmony_ci this_cpu_generic_cmpxchg(pcp, oval, nval) 4258c2ecf20Sopenharmony_ci#endif 4268c2ecf20Sopenharmony_ci 4278c2ecf20Sopenharmony_ci#ifndef this_cpu_cmpxchg_double_1 4288c2ecf20Sopenharmony_ci#define this_cpu_cmpxchg_double_1(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 4298c2ecf20Sopenharmony_ci this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) 4308c2ecf20Sopenharmony_ci#endif 4318c2ecf20Sopenharmony_ci#ifndef this_cpu_cmpxchg_double_2 4328c2ecf20Sopenharmony_ci#define this_cpu_cmpxchg_double_2(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 4338c2ecf20Sopenharmony_ci this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) 4348c2ecf20Sopenharmony_ci#endif 4358c2ecf20Sopenharmony_ci#ifndef this_cpu_cmpxchg_double_4 4368c2ecf20Sopenharmony_ci#define this_cpu_cmpxchg_double_4(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 4378c2ecf20Sopenharmony_ci this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) 4388c2ecf20Sopenharmony_ci#endif 4398c2ecf20Sopenharmony_ci#ifndef this_cpu_cmpxchg_double_8 4408c2ecf20Sopenharmony_ci#define this_cpu_cmpxchg_double_8(pcp1, pcp2, oval1, oval2, nval1, nval2) \ 4418c2ecf20Sopenharmony_ci this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) 4428c2ecf20Sopenharmony_ci#endif 4438c2ecf20Sopenharmony_ci 4448c2ecf20Sopenharmony_ci#endif /* _ASM_GENERIC_PERCPU_H_ */ 445