linux/include/asm-generic/percpu.h

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_GENERIC_PERCPU_H_
#define _ASM_GENERIC_PERCPU_H_

#include <linux/compiler.h>
#include <linux/threads.h>
#include <linux/percpu-defs.h>

#ifdef CONFIG_SMP

/*
 * per_cpu_offset() is the offset that has to be added to a
 * percpu variable to get to the instance for a certain processor.
 *
 * Most arches use the __per_cpu_offset array for those offsets but
 * some arches have their own ways of determining the offset (x86_64, s390).
 */
#ifndef __per_cpu_offset
extern unsigned long __per_cpu_offset[NR_CPUS];

#define per_cpu_offset(x)
#endif

/*
 * Determine the offset for the currently active processor.
 * An arch may define __my_cpu_offset to provide a more effective
 * means of obtaining the offset to the per cpu variables of the
 * current processor.
 */
#ifndef __my_cpu_offset
#define __my_cpu_offset
#endif
#ifdef CONFIG_DEBUG_PREEMPT
#define my_cpu_offset
#else
#define my_cpu_offset
#endif

/*
 * Arch may define arch_raw_cpu_ptr() to provide more efficient address
 * translations for raw_cpu_ptr().
 */
#ifndef arch_raw_cpu_ptr
#define arch_raw_cpu_ptr
#endif

#ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA
extern void setup_per_cpu_areas(void);
#endif

#endif	/* SMP */

#ifndef PER_CPU_BASE_SECTION
#ifdef CONFIG_SMP
#define PER_CPU_BASE_SECTION
#else
#define PER_CPU_BASE_SECTION
#endif
#endif

#ifndef PER_CPU_ATTRIBUTES
#define PER_CPU_ATTRIBUTES
#endif

#define raw_cpu_generic_read(pcp)

#define raw_cpu_generic_to_op(pcp, val, op)

#define raw_cpu_generic_add_return(pcp, val)

#define raw_cpu_generic_xchg(pcp, nval)

#define __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, _cmpxchg)

#define raw_cpu_generic_try_cmpxchg(pcp, ovalp, nval)

#define raw_cpu_generic_cmpxchg(pcp, oval, nval)

#define __this_cpu_generic_read_nopreempt(pcp)

#define __this_cpu_generic_read_noirq(pcp)

#define this_cpu_generic_read(pcp)

#define this_cpu_generic_to_op(pcp, val, op)


#define this_cpu_generic_add_return(pcp, val)

#define this_cpu_generic_xchg(pcp, nval)

#define this_cpu_generic_try_cmpxchg(pcp, ovalp, nval)

#define this_cpu_generic_cmpxchg(pcp, oval, nval)

#ifndef raw_cpu_read_1
#define raw_cpu_read_1
#endif
#ifndef raw_cpu_read_2
#define raw_cpu_read_2
#endif
#ifndef raw_cpu_read_4
#define raw_cpu_read_4
#endif
#ifndef raw_cpu_read_8
#define raw_cpu_read_8
#endif

#ifndef raw_cpu_write_1
#define raw_cpu_write_1
#endif
#ifndef raw_cpu_write_2
#define raw_cpu_write_2
#endif
#ifndef raw_cpu_write_4
#define raw_cpu_write_4
#endif
#ifndef raw_cpu_write_8
#define raw_cpu_write_8
#endif

#ifndef raw_cpu_add_1
#define raw_cpu_add_1
#endif
#ifndef raw_cpu_add_2
#define raw_cpu_add_2
#endif
#ifndef raw_cpu_add_4
#define raw_cpu_add_4
#endif
#ifndef raw_cpu_add_8
#define raw_cpu_add_8
#endif

#ifndef raw_cpu_and_1
#define raw_cpu_and_1
#endif
#ifndef raw_cpu_and_2
#define raw_cpu_and_2
#endif
#ifndef raw_cpu_and_4
#define raw_cpu_and_4
#endif
#ifndef raw_cpu_and_8
#define raw_cpu_and_8
#endif

#ifndef raw_cpu_or_1
#define raw_cpu_or_1
#endif
#ifndef raw_cpu_or_2
#define raw_cpu_or_2
#endif
#ifndef raw_cpu_or_4
#define raw_cpu_or_4
#endif
#ifndef raw_cpu_or_8
#define raw_cpu_or_8
#endif

#ifndef raw_cpu_add_return_1
#define raw_cpu_add_return_1
#endif
#ifndef raw_cpu_add_return_2
#define raw_cpu_add_return_2
#endif
#ifndef raw_cpu_add_return_4
#define raw_cpu_add_return_4
#endif
#ifndef raw_cpu_add_return_8
#define raw_cpu_add_return_8
#endif

#ifndef raw_cpu_xchg_1
#define raw_cpu_xchg_1
#endif
#ifndef raw_cpu_xchg_2
#define raw_cpu_xchg_2
#endif
#ifndef raw_cpu_xchg_4
#define raw_cpu_xchg_4
#endif
#ifndef raw_cpu_xchg_8
#define raw_cpu_xchg_8
#endif

#ifndef raw_cpu_try_cmpxchg_1
#ifdef raw_cpu_cmpxchg_1
#define raw_cpu_try_cmpxchg_1
#else
#define raw_cpu_try_cmpxchg_1
#endif
#endif
#ifndef raw_cpu_try_cmpxchg_2
#ifdef raw_cpu_cmpxchg_2
#define raw_cpu_try_cmpxchg_2
#else
#define raw_cpu_try_cmpxchg_2
#endif
#endif
#ifndef raw_cpu_try_cmpxchg_4
#ifdef raw_cpu_cmpxchg_4
#define raw_cpu_try_cmpxchg_4
#else
#define raw_cpu_try_cmpxchg_4
#endif
#endif
#ifndef raw_cpu_try_cmpxchg_8
#ifdef raw_cpu_cmpxchg_8
#define raw_cpu_try_cmpxchg_8
#else
#define raw_cpu_try_cmpxchg_8
#endif
#endif

#ifndef raw_cpu_try_cmpxchg64
#ifdef raw_cpu_cmpxchg64
#define raw_cpu_try_cmpxchg64
#else
#define raw_cpu_try_cmpxchg64
#endif
#endif
#ifndef raw_cpu_try_cmpxchg128
#ifdef raw_cpu_cmpxchg128
#define raw_cpu_try_cmpxchg128
#else
#define raw_cpu_try_cmpxchg128
#endif
#endif

#ifndef raw_cpu_cmpxchg_1
#define raw_cpu_cmpxchg_1
#endif
#ifndef raw_cpu_cmpxchg_2
#define raw_cpu_cmpxchg_2
#endif
#ifndef raw_cpu_cmpxchg_4
#define raw_cpu_cmpxchg_4
#endif
#ifndef raw_cpu_cmpxchg_8
#define raw_cpu_cmpxchg_8
#endif

#ifndef raw_cpu_cmpxchg64
#define raw_cpu_cmpxchg64
#endif
#ifndef raw_cpu_cmpxchg128
#define raw_cpu_cmpxchg128
#endif

#ifndef this_cpu_read_1
#define this_cpu_read_1
#endif
#ifndef this_cpu_read_2
#define this_cpu_read_2
#endif
#ifndef this_cpu_read_4
#define this_cpu_read_4
#endif
#ifndef this_cpu_read_8
#define this_cpu_read_8
#endif

#ifndef this_cpu_write_1
#define this_cpu_write_1
#endif
#ifndef this_cpu_write_2
#define this_cpu_write_2
#endif
#ifndef this_cpu_write_4
#define this_cpu_write_4
#endif
#ifndef this_cpu_write_8
#define this_cpu_write_8
#endif

#ifndef this_cpu_add_1
#define this_cpu_add_1
#endif
#ifndef this_cpu_add_2
#define this_cpu_add_2
#endif
#ifndef this_cpu_add_4
#define this_cpu_add_4
#endif
#ifndef this_cpu_add_8
#define this_cpu_add_8
#endif

#ifndef this_cpu_and_1
#define this_cpu_and_1
#endif
#ifndef this_cpu_and_2
#define this_cpu_and_2
#endif
#ifndef this_cpu_and_4
#define this_cpu_and_4
#endif
#ifndef this_cpu_and_8
#define this_cpu_and_8
#endif

#ifndef this_cpu_or_1
#define this_cpu_or_1
#endif
#ifndef this_cpu_or_2
#define this_cpu_or_2
#endif
#ifndef this_cpu_or_4
#define this_cpu_or_4
#endif
#ifndef this_cpu_or_8
#define this_cpu_or_8
#endif

#ifndef this_cpu_add_return_1
#define this_cpu_add_return_1
#endif
#ifndef this_cpu_add_return_2
#define this_cpu_add_return_2
#endif
#ifndef this_cpu_add_return_4
#define this_cpu_add_return_4
#endif
#ifndef this_cpu_add_return_8
#define this_cpu_add_return_8
#endif

#ifndef this_cpu_xchg_1
#define this_cpu_xchg_1
#endif
#ifndef this_cpu_xchg_2
#define this_cpu_xchg_2
#endif
#ifndef this_cpu_xchg_4
#define this_cpu_xchg_4
#endif
#ifndef this_cpu_xchg_8
#define this_cpu_xchg_8
#endif

#ifndef this_cpu_try_cmpxchg_1
#ifdef this_cpu_cmpxchg_1
#define this_cpu_try_cmpxchg_1
#else
#define this_cpu_try_cmpxchg_1
#endif
#endif
#ifndef this_cpu_try_cmpxchg_2
#ifdef this_cpu_cmpxchg_2
#define this_cpu_try_cmpxchg_2
#else
#define this_cpu_try_cmpxchg_2
#endif
#endif
#ifndef this_cpu_try_cmpxchg_4
#ifdef this_cpu_cmpxchg_4
#define this_cpu_try_cmpxchg_4
#else
#define this_cpu_try_cmpxchg_4
#endif
#endif
#ifndef this_cpu_try_cmpxchg_8
#ifdef this_cpu_cmpxchg_8
#define this_cpu_try_cmpxchg_8
#else
#define this_cpu_try_cmpxchg_8
#endif
#endif

#ifndef this_cpu_try_cmpxchg64
#ifdef this_cpu_cmpxchg64
#define this_cpu_try_cmpxchg64
#else
#define this_cpu_try_cmpxchg64
#endif
#endif
#ifndef this_cpu_try_cmpxchg128
#ifdef this_cpu_cmpxchg128
#define this_cpu_try_cmpxchg128
#else
#define this_cpu_try_cmpxchg128
#endif
#endif

#ifndef this_cpu_cmpxchg_1
#define this_cpu_cmpxchg_1
#endif
#ifndef this_cpu_cmpxchg_2
#define this_cpu_cmpxchg_2
#endif
#ifndef this_cpu_cmpxchg_4
#define this_cpu_cmpxchg_4
#endif
#ifndef this_cpu_cmpxchg_8
#define this_cpu_cmpxchg_8
#endif

#ifndef this_cpu_cmpxchg64
#define this_cpu_cmpxchg64
#endif
#ifndef this_cpu_cmpxchg128
#define this_cpu_cmpxchg128
#endif

#endif /* _ASM_GENERIC_PERCPU_H_ */