|
@@ -4,9 +4,8 @@
|
|
|
static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
|
|
{
|
|
|
#ifdef CONFIG_SMP
|
|
|
- unsigned cpu = smp_processor_id();
|
|
|
- if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK)
|
|
|
- per_cpu(cpu_tlbstate, cpu).state = TLBSTATE_LAZY;
|
|
|
+ if (x86_read_percpu(cpu_tlbstate.state) == TLBSTATE_OK)
|
|
|
+ x86_write_percpu(cpu_tlbstate.state, TLBSTATE_LAZY);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -20,8 +19,8 @@ static inline void switch_mm(struct mm_struct *prev,
|
|
|
/* stop flush ipis for the previous mm */
|
|
|
cpu_clear(cpu, prev->cpu_vm_mask);
|
|
|
#ifdef CONFIG_SMP
|
|
|
- per_cpu(cpu_tlbstate, cpu).state = TLBSTATE_OK;
|
|
|
- per_cpu(cpu_tlbstate, cpu).active_mm = next;
|
|
|
+ x86_write_percpu(cpu_tlbstate.state, TLBSTATE_OK);
|
|
|
+ x86_write_percpu(cpu_tlbstate.active_mm, next);
|
|
|
#endif
|
|
|
cpu_set(cpu, next->cpu_vm_mask);
|
|
|
|
|
@@ -36,8 +35,8 @@ static inline void switch_mm(struct mm_struct *prev,
|
|
|
}
|
|
|
#ifdef CONFIG_SMP
|
|
|
else {
|
|
|
- per_cpu(cpu_tlbstate, cpu).state = TLBSTATE_OK;
|
|
|
- BUG_ON(per_cpu(cpu_tlbstate, cpu).active_mm != next);
|
|
|
+ x86_write_percpu(cpu_tlbstate.state, TLBSTATE_OK);
|
|
|
+ BUG_ON(x86_read_percpu(cpu_tlbstate.active_mm) != next);
|
|
|
|
|
|
if (!cpu_test_and_set(cpu, next->cpu_vm_mask)) {
|
|
|
/* We were in lazy tlb mode and leave_mm disabled
|