linux/arch/ia64/include/asm/percpu.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _ASM_IA64_PERCPU_H
   3#define _ASM_IA64_PERCPU_H
   4
   5/*
   6 * Copyright (C) 2002-2003 Hewlett-Packard Co
   7 *      David Mosberger-Tang <davidm@hpl.hp.com>
   8 */
   9
  10#ifdef __ASSEMBLY__
  11# define THIS_CPU(var)  (var)  /* use this to mark accesses to per-CPU variables... */
  12#else /* !__ASSEMBLY__ */
  13
  14
  15#include <linux/threads.h>
  16
  17#ifdef CONFIG_SMP
  18
  19#ifdef HAVE_MODEL_SMALL_ATTRIBUTE
  20# define PER_CPU_ATTRIBUTES     __attribute__((__model__ (__small__)))
  21#endif
  22
  23#define __my_cpu_offset __ia64_per_cpu_var(local_per_cpu_offset)
  24
  25extern void *per_cpu_init(void);
  26
  27#else /* ! SMP */
  28
  29#define per_cpu_init()                          (__phys_per_cpu_start)
  30
  31#endif  /* SMP */
  32
  33#define PER_CPU_BASE_SECTION ".data..percpu"
  34
  35/*
  36 * Be extremely careful when taking the address of this variable!  Due to virtual
  37 * remapping, it is different from the canonical address returned by this_cpu_ptr(&var)!
  38 * On the positive side, using __ia64_per_cpu_var() instead of this_cpu_ptr() is slightly
  39 * more efficient.
  40 */
  41#define __ia64_per_cpu_var(var) (*({                                    \
  42        __verify_pcpu_ptr(&(var));                                      \
  43        ((typeof(var) __kernel __force *)&(var));                       \
  44}))
  45
  46#include <asm-generic/percpu.h>
  47
  48/* Equal to __per_cpu_offset[smp_processor_id()], but faster to access: */
  49DECLARE_PER_CPU(unsigned long, local_per_cpu_offset);
  50
  51#endif /* !__ASSEMBLY__ */
  52
  53#endif /* _ASM_IA64_PERCPU_H */
  54