]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - arch/x86/include/asm/pda.h
Merge branch 'tj-percpu' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc...
[linux-2.6-omap-h63xx.git] / arch / x86 / include / asm / pda.h
1 #ifndef _ASM_X86_PDA_H
2 #define _ASM_X86_PDA_H
3
4 #ifndef __ASSEMBLY__
5 #include <linux/stddef.h>
6 #include <linux/types.h>
7 #include <linux/cache.h>
8 #include <linux/threads.h>
9 #include <asm/page.h>
10 #include <asm/percpu.h>
11
12 /* Per processor datastructure. %gs points to it while the kernel runs */
13 struct x8664_pda {
14         unsigned long unused1;
15         unsigned long unused2;
16         unsigned long unused3;
17         unsigned long unused4;
18         int unused5;
19         unsigned int unused6;           /* 36 was cpunumber */
20 #ifdef CONFIG_CC_STACKPROTECTOR
21         unsigned long stack_canary;     /* 40 stack canary value */
22                                         /* gcc-ABI: this canary MUST be at
23                                            offset 40!!! */
24 #endif
25         short in_bootmem;               /* pda lives in bootmem */
26 } ____cacheline_aligned_in_smp;
27
28 DECLARE_PER_CPU(struct x8664_pda, __pda);
29 extern void pda_init(int);
30
31 #define cpu_pda(cpu)            (&per_cpu(__pda, cpu))
32
33 #define read_pda(field)         percpu_read(__pda.field)
34 #define write_pda(field, val)   percpu_write(__pda.field, val)
35 #define add_pda(field, val)     percpu_add(__pda.field, val)
36 #define sub_pda(field, val)     percpu_sub(__pda.field, val)
37 #define or_pda(field, val)      percpu_or(__pda.field, val)
38
39 /* This is not atomic against other CPUs -- CPU preemption needs to be off */
40 #define test_and_clear_bit_pda(bit, field)                              \
41         x86_test_and_clear_bit_percpu(bit, __pda.field)
42
43 #endif
44
45 #endif /* _ASM_X86_PDA_H */