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