x86, 32-bit: improve lazy TLB handling code
Impact: micro-optimize the 32-bit TLB flush code Use the faster x86_{read,write}_percpu() accessors here. Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -34,9 +34,8 @@ static DEFINE_SPINLOCK(tlbstate_lock);
|
||||
*/
|
||||
void leave_mm(int cpu)
|
||||
{
|
||||
if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK)
|
||||
BUG();
|
||||
cpu_clear(cpu, per_cpu(cpu_tlbstate, cpu).active_mm->cpu_vm_mask);
|
||||
BUG_ON(x86_read_percpu(cpu_tlbstate.state) == TLBSTATE_OK);
|
||||
cpu_clear(cpu, x86_read_percpu(cpu_tlbstate.active_mm)->cpu_vm_mask);
|
||||
load_cr3(swapper_pg_dir);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(leave_mm);
|
||||
@@ -104,8 +103,8 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
|
||||
* BUG();
|
||||
*/
|
||||
|
||||
if (flush_mm == per_cpu(cpu_tlbstate, cpu).active_mm) {
|
||||
if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_OK) {
|
||||
if (flush_mm == x86_read_percpu(cpu_tlbstate.active_mm)) {
|
||||
if (x86_read_percpu(cpu_tlbstate.state) == TLBSTATE_OK) {
|
||||
if (flush_va == TLB_FLUSH_ALL)
|
||||
local_flush_tlb();
|
||||
else
|
||||
@@ -238,7 +237,7 @@ static void do_flush_tlb_all(void *info)
|
||||
unsigned long cpu = smp_processor_id();
|
||||
|
||||
__flush_tlb_all();
|
||||
if (per_cpu(cpu_tlbstate, cpu).state == TLBSTATE_LAZY)
|
||||
if (x86_read_percpu(cpu_tlbstate.state) == TLBSTATE_LAZY)
|
||||
leave_mm(cpu);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user