Blame view
include/asm-generic/percpu.h
2.44 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 |
#ifndef _ASM_GENERIC_PERCPU_H_ #define _ASM_GENERIC_PERCPU_H_ |
5028eaa97 PERCPU: Collect t... |
3 |
|
1da177e4c Linux-2.6.12-rc2 |
4 |
#include <linux/compiler.h> |
ae1ee11be [PATCH] i386: Use... |
5 |
#include <linux/threads.h> |
5028eaa97 PERCPU: Collect t... |
6 |
#include <linux/percpu-defs.h> |
acdac8720 percpu: make the ... |
7 |
|
1da177e4c Linux-2.6.12-rc2 |
8 |
#ifdef CONFIG_SMP |
acdac8720 percpu: make the ... |
9 10 11 12 13 14 15 16 |
/* * 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 |
1da177e4c Linux-2.6.12-rc2 |
17 |
extern unsigned long __per_cpu_offset[NR_CPUS]; |
a875a69f8 [PATCH] lockdep: ... |
18 |
#define per_cpu_offset(x) (__per_cpu_offset[x]) |
acdac8720 percpu: make the ... |
19 20 21 22 23 24 25 26 27 28 |
#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 per_cpu_offset(raw_smp_processor_id()) |
1e8352784 percpu: fix DEBUG... |
29 30 |
#endif #ifdef CONFIG_DEBUG_PREEMPT |
acdac8720 percpu: make the ... |
31 32 33 34 35 36 37 38 39 40 41 42 43 |
#define my_cpu_offset per_cpu_offset(smp_processor_id()) #else #define my_cpu_offset __my_cpu_offset #endif /* * Add a offset to a pointer but keep the pointer as is. * * Only S390 provides its own means of moving the pointer. */ #ifndef SHIFT_PERCPU_PTR #define SHIFT_PERCPU_PTR(__p, __offset) RELOC_HIDE((__p), (__offset)) #endif |
a875a69f8 [PATCH] lockdep: ... |
44 |
|
acdac8720 percpu: make the ... |
45 |
/* |
dd5af90a7 x86/non-x86: perc... |
46 |
* A percpu variable may point to a discarded regions. The following are |
acdac8720 percpu: make the ... |
47 48 49 50 51 52 53 54 55 |
* established ways to produce a usable pointer from the percpu variable * offset. */ #define per_cpu(var, cpu) \ (*SHIFT_PERCPU_PTR(&per_cpu_var(var), per_cpu_offset(cpu))) #define __get_cpu_var(var) \ (*SHIFT_PERCPU_PTR(&per_cpu_var(var), my_cpu_offset)) #define __raw_get_cpu_var(var) \ (*SHIFT_PERCPU_PTR(&per_cpu_var(var), __my_cpu_offset)) |
dd5af90a7 x86/non-x86: perc... |
56 |
#ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA |
acdac8720 percpu: make the ... |
57 58 |
extern void setup_per_cpu_areas(void); #endif |
1da177e4c Linux-2.6.12-rc2 |
59 |
|
1da177e4c Linux-2.6.12-rc2 |
60 |
#else /* ! SMP */ |
acdac8720 percpu: make the ... |
61 62 63 |
#define per_cpu(var, cpu) (*((void)(cpu), &per_cpu_var(var))) #define __get_cpu_var(var) per_cpu_var(var) #define __raw_get_cpu_var(var) per_cpu_var(var) |
1da177e4c Linux-2.6.12-rc2 |
64 65 |
#endif /* SMP */ |
9b8de7479 FRV: Fix the sect... |
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
#ifndef PER_CPU_BASE_SECTION #ifdef CONFIG_SMP #define PER_CPU_BASE_SECTION ".data.percpu" #else #define PER_CPU_BASE_SECTION ".data" #endif #endif #ifdef CONFIG_SMP #ifdef MODULE #define PER_CPU_SHARED_ALIGNED_SECTION "" #else #define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned" #endif #define PER_CPU_FIRST_SECTION ".first" #else #define PER_CPU_SHARED_ALIGNED_SECTION "" #define PER_CPU_FIRST_SECTION "" #endif |
acdac8720 percpu: make the ... |
89 90 91 |
#ifndef PER_CPU_ATTRIBUTES #define PER_CPU_ATTRIBUTES #endif |
1da177e4c Linux-2.6.12-rc2 |
92 |
#endif /* _ASM_GENERIC_PERCPU_H_ */ |