aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/tlb_32.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/tlb_32.c')
-rw-r--r--arch/x86/kernel/tlb_32.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/x86/kernel/tlb_32.c b/arch/x86/kernel/tlb_32.c
index abf0808d6fc4..93fcb05c7d43 100644
--- a/arch/x86/kernel/tlb_32.c
+++ b/arch/x86/kernel/tlb_32.c
@@ -84,13 +84,15 @@ EXPORT_SYMBOL_GPL(leave_mm);
84 * 84 *
85 * 1) Flush the tlb entries if the cpu uses the mm that's being flushed. 85 * 1) Flush the tlb entries if the cpu uses the mm that's being flushed.
86 * 2) Leave the mm if we are in the lazy tlb mode. 86 * 2) Leave the mm if we are in the lazy tlb mode.
87 *
88 * Interrupts are disabled.
87 */ 89 */
88 90
89void smp_invalidate_interrupt(struct pt_regs *regs) 91void smp_invalidate_interrupt(struct pt_regs *regs)
90{ 92{
91 unsigned long cpu; 93 unsigned int cpu;
92 94
93 cpu = get_cpu(); 95 cpu = smp_processor_id();
94 96
95 if (!cpumask_test_cpu(cpu, flush_cpumask)) 97 if (!cpumask_test_cpu(cpu, flush_cpumask))
96 goto out; 98 goto out;
@@ -112,12 +114,11 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
112 } else 114 } else
113 leave_mm(cpu); 115 leave_mm(cpu);
114 } 116 }
117out:
115 ack_APIC_irq(); 118 ack_APIC_irq();
116 smp_mb__before_clear_bit(); 119 smp_mb__before_clear_bit();
117 cpumask_clear_cpu(cpu, flush_cpumask); 120 cpumask_clear_cpu(cpu, flush_cpumask);
118 smp_mb__after_clear_bit(); 121 smp_mb__after_clear_bit();
119out:
120 put_cpu_no_resched();
121 inc_irq_stat(irq_tlb_count); 122 inc_irq_stat(irq_tlb_count);
122} 123}
123 124
@@ -215,7 +216,6 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long va)
215 flush_tlb_others(&mm->cpu_vm_mask, mm, va); 216 flush_tlb_others(&mm->cpu_vm_mask, mm, va);
216 preempt_enable(); 217 preempt_enable();
217} 218}
218EXPORT_SYMBOL(flush_tlb_page);
219 219
220static void do_flush_tlb_all(void *info) 220static void do_flush_tlb_all(void *info)
221{ 221{