diff options
author | Brian Gerst <brgerst@gmail.com> | 2009-01-18 10:38:58 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2009-01-18 10:38:58 -0500 |
commit | 5689553076c4a67b83426b076082c63085b7567a (patch) | |
tree | 982dac3bceff2dbdb7b962c24b068b5f6e72ccd1 /arch | |
parent | 3d1e42a7cf945e289d6ba26159aa0e2b0645401b (diff) |
x86-64: Move irqcount from PDA to per-cpu.
tj: s/irqcount/irq_count/
Signed-off-by: Brian Gerst <brgerst@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/include/asm/pda.h | 2 | ||||
-rw-r--r-- | arch/x86/kernel/asm-offsets_64.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/common.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/entry_64.S | 14 |
4 files changed, 10 insertions, 11 deletions
diff --git a/arch/x86/include/asm/pda.h b/arch/x86/include/asm/pda.h index ae23deb99559..4527d70314d4 100644 --- a/arch/x86/include/asm/pda.h +++ b/arch/x86/include/asm/pda.h | |||
@@ -15,7 +15,7 @@ struct x8664_pda { | |||
15 | unsigned long unused2; | 15 | unsigned long unused2; |
16 | unsigned long unused3; | 16 | unsigned long unused3; |
17 | unsigned long unused4; | 17 | unsigned long unused4; |
18 | int irqcount; /* 32 Irq nesting counter. Starts -1 */ | 18 | int unused5; |
19 | unsigned int unused6; /* 36 was cpunumber */ | 19 | unsigned int unused6; /* 36 was cpunumber */ |
20 | #ifdef CONFIG_CC_STACKPROTECTOR | 20 | #ifdef CONFIG_CC_STACKPROTECTOR |
21 | unsigned long stack_canary; /* 40 stack canary value */ | 21 | unsigned long stack_canary; /* 40 stack canary value */ |
diff --git a/arch/x86/kernel/asm-offsets_64.c b/arch/x86/kernel/asm-offsets_64.c index afda6deb8515..64c834a39aa8 100644 --- a/arch/x86/kernel/asm-offsets_64.c +++ b/arch/x86/kernel/asm-offsets_64.c | |||
@@ -49,7 +49,6 @@ int main(void) | |||
49 | BLANK(); | 49 | BLANK(); |
50 | #undef ENTRY | 50 | #undef ENTRY |
51 | #define ENTRY(entry) DEFINE(pda_ ## entry, offsetof(struct x8664_pda, entry)) | 51 | #define ENTRY(entry) DEFINE(pda_ ## entry, offsetof(struct x8664_pda, entry)) |
52 | ENTRY(irqcount); | ||
53 | DEFINE(pda_size, sizeof(struct x8664_pda)); | 52 | DEFINE(pda_size, sizeof(struct x8664_pda)); |
54 | BLANK(); | 53 | BLANK(); |
55 | #undef ENTRY | 54 | #undef ENTRY |
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 06b6290088f4..e2323ecce1d3 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -893,6 +893,8 @@ DEFINE_PER_CPU(unsigned long, kernel_stack) = | |||
893 | (unsigned long)&init_thread_union - KERNEL_STACK_OFFSET + THREAD_SIZE; | 893 | (unsigned long)&init_thread_union - KERNEL_STACK_OFFSET + THREAD_SIZE; |
894 | EXPORT_PER_CPU_SYMBOL(kernel_stack); | 894 | EXPORT_PER_CPU_SYMBOL(kernel_stack); |
895 | 895 | ||
896 | DEFINE_PER_CPU(unsigned int, irq_count) = -1; | ||
897 | |||
896 | void __cpuinit pda_init(int cpu) | 898 | void __cpuinit pda_init(int cpu) |
897 | { | 899 | { |
898 | struct x8664_pda *pda = cpu_pda(cpu); | 900 | struct x8664_pda *pda = cpu_pda(cpu); |
@@ -903,8 +905,6 @@ void __cpuinit pda_init(int cpu) | |||
903 | 905 | ||
904 | load_pda_offset(cpu); | 906 | load_pda_offset(cpu); |
905 | 907 | ||
906 | pda->irqcount = -1; | ||
907 | |||
908 | if (cpu != 0) { | 908 | if (cpu != 0) { |
909 | if (pda->nodenumber == 0 && cpu_to_node(cpu) != NUMA_NO_NODE) | 909 | if (pda->nodenumber == 0 && cpu_to_node(cpu) != NUMA_NO_NODE) |
910 | pda->nodenumber = cpu_to_node(cpu); | 910 | pda->nodenumber = cpu_to_node(cpu); |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 7c27da407da7..c52b60919163 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -337,12 +337,12 @@ ENTRY(save_args) | |||
337 | je 1f | 337 | je 1f |
338 | SWAPGS | 338 | SWAPGS |
339 | /* | 339 | /* |
340 | * irqcount is used to check if a CPU is already on an interrupt stack | 340 | * irq_count is used to check if a CPU is already on an interrupt stack |
341 | * or not. While this is essentially redundant with preempt_count it is | 341 | * or not. While this is essentially redundant with preempt_count it is |
342 | * a little cheaper to use a separate counter in the PDA (short of | 342 | * a little cheaper to use a separate counter in the PDA (short of |
343 | * moving irq_enter into assembly, which would be too much work) | 343 | * moving irq_enter into assembly, which would be too much work) |
344 | */ | 344 | */ |
345 | 1: incl %gs:pda_irqcount | 345 | 1: incl PER_CPU_VAR(irq_count) |
346 | jne 2f | 346 | jne 2f |
347 | popq_cfi %rax /* move return address... */ | 347 | popq_cfi %rax /* move return address... */ |
348 | mov PER_CPU_VAR(irq_stack_ptr),%rsp | 348 | mov PER_CPU_VAR(irq_stack_ptr),%rsp |
@@ -837,7 +837,7 @@ common_interrupt: | |||
837 | ret_from_intr: | 837 | ret_from_intr: |
838 | DISABLE_INTERRUPTS(CLBR_NONE) | 838 | DISABLE_INTERRUPTS(CLBR_NONE) |
839 | TRACE_IRQS_OFF | 839 | TRACE_IRQS_OFF |
840 | decl %gs:pda_irqcount | 840 | decl PER_CPU_VAR(irq_count) |
841 | leaveq | 841 | leaveq |
842 | CFI_DEF_CFA_REGISTER rsp | 842 | CFI_DEF_CFA_REGISTER rsp |
843 | CFI_ADJUST_CFA_OFFSET -8 | 843 | CFI_ADJUST_CFA_OFFSET -8 |
@@ -1260,14 +1260,14 @@ ENTRY(call_softirq) | |||
1260 | CFI_REL_OFFSET rbp,0 | 1260 | CFI_REL_OFFSET rbp,0 |
1261 | mov %rsp,%rbp | 1261 | mov %rsp,%rbp |
1262 | CFI_DEF_CFA_REGISTER rbp | 1262 | CFI_DEF_CFA_REGISTER rbp |
1263 | incl %gs:pda_irqcount | 1263 | incl PER_CPU_VAR(irq_count) |
1264 | cmove PER_CPU_VAR(irq_stack_ptr),%rsp | 1264 | cmove PER_CPU_VAR(irq_stack_ptr),%rsp |
1265 | push %rbp # backlink for old unwinder | 1265 | push %rbp # backlink for old unwinder |
1266 | call __do_softirq | 1266 | call __do_softirq |
1267 | leaveq | 1267 | leaveq |
1268 | CFI_DEF_CFA_REGISTER rsp | 1268 | CFI_DEF_CFA_REGISTER rsp |
1269 | CFI_ADJUST_CFA_OFFSET -8 | 1269 | CFI_ADJUST_CFA_OFFSET -8 |
1270 | decl %gs:pda_irqcount | 1270 | decl PER_CPU_VAR(irq_count) |
1271 | ret | 1271 | ret |
1272 | CFI_ENDPROC | 1272 | CFI_ENDPROC |
1273 | END(call_softirq) | 1273 | END(call_softirq) |
@@ -1297,7 +1297,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs) | |||
1297 | movq %rdi, %rsp # we don't return, adjust the stack frame | 1297 | movq %rdi, %rsp # we don't return, adjust the stack frame |
1298 | CFI_ENDPROC | 1298 | CFI_ENDPROC |
1299 | DEFAULT_FRAME | 1299 | DEFAULT_FRAME |
1300 | 11: incl %gs:pda_irqcount | 1300 | 11: incl PER_CPU_VAR(irq_count) |
1301 | movq %rsp,%rbp | 1301 | movq %rsp,%rbp |
1302 | CFI_DEF_CFA_REGISTER rbp | 1302 | CFI_DEF_CFA_REGISTER rbp |
1303 | cmovzq PER_CPU_VAR(irq_stack_ptr),%rsp | 1303 | cmovzq PER_CPU_VAR(irq_stack_ptr),%rsp |
@@ -1305,7 +1305,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs) | |||
1305 | call xen_evtchn_do_upcall | 1305 | call xen_evtchn_do_upcall |
1306 | popq %rsp | 1306 | popq %rsp |
1307 | CFI_DEF_CFA_REGISTER rsp | 1307 | CFI_DEF_CFA_REGISTER rsp |
1308 | decl %gs:pda_irqcount | 1308 | decl PER_CPU_VAR(irq_count) |
1309 | jmp error_exit | 1309 | jmp error_exit |
1310 | CFI_ENDPROC | 1310 | CFI_ENDPROC |
1311 | END(do_hypervisor_callback) | 1311 | END(do_hypervisor_callback) |