x86-64: Move irq stats from PDA to per-cpu and consolidate with 32-bit.
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / arch / x86 / include / asm / pda.h
blob69a40757e21718c7c32c7e88969222c8165051c4
1 #ifndef _ASM_X86_PDA_H
2 #define _ASM_X86_PDA_H
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>
12 /* Per processor datastructure. %gs points to it while the kernel runs */
13 struct x8664_pda {
14 struct task_struct *pcurrent; /* 0 Current process */
15 unsigned long dummy;
16 unsigned long kernelstack; /* 16 top of kernel stack for current */
17 unsigned long oldrsp; /* 24 user rsp for system call */
18 int irqcount; /* 32 Irq nesting counter. Starts -1 */
19 unsigned int cpunumber; /* 36 Logical CPU number */
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 char *irqstackptr;
26 short nodenumber; /* number of current node (32k max) */
27 short in_bootmem; /* pda lives in bootmem */
28 short mmu_state;
29 short isidle;
30 struct mm_struct *active_mm;
31 } ____cacheline_aligned_in_smp;
33 DECLARE_PER_CPU(struct x8664_pda, __pda);
34 extern void pda_init(int);
36 #define cpu_pda(cpu) (&per_cpu(__pda, cpu))
38 #define read_pda(field) percpu_read(__pda.field)
39 #define write_pda(field, val) percpu_write(__pda.field, val)
40 #define add_pda(field, val) percpu_add(__pda.field, val)
41 #define sub_pda(field, val) percpu_sub(__pda.field, val)
42 #define or_pda(field, val) percpu_or(__pda.field, val)
44 /* This is not atomic against other CPUs -- CPU preemption needs to be off */
45 #define test_and_clear_bit_pda(bit, field) \
46 x86_test_and_clear_bit_percpu(bit, __pda.field)
48 #endif
50 #define PDA_STACKOFFSET (5*8)
52 #endif /* _ASM_X86_PDA_H */