Przeglądaj źródła

x86: avoid re-loading LDT in unrelated address spaces

Performance optimization.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Jan Beulich 17 lat temu
rodzic
commit
b478458aee
1 zmienionych plików z 3 dodań i 3 usunięć
  1. 3 3
      arch/x86/kernel/ldt.c

+ 3 - 3
arch/x86/kernel/ldt.c

@@ -20,9 +20,9 @@
 #include <asm/mmu_context.h>
 #include <asm/mmu_context.h>
 
 
 #ifdef CONFIG_SMP
 #ifdef CONFIG_SMP
-static void flush_ldt(void *null)
+static void flush_ldt(void *current_mm)
 {
 {
-	if (current->active_mm)
+	if (current->active_mm == current_mm)
 		load_LDT(&current->active_mm->context);
 		load_LDT(&current->active_mm->context);
 }
 }
 #endif
 #endif
@@ -68,7 +68,7 @@ static int alloc_ldt(mm_context_t *pc, int mincount, int reload)
 		load_LDT(pc);
 		load_LDT(pc);
 		mask = cpumask_of_cpu(smp_processor_id());
 		mask = cpumask_of_cpu(smp_processor_id());
 		if (!cpus_equal(current->mm->cpu_vm_mask, mask))
 		if (!cpus_equal(current->mm->cpu_vm_mask, mask))
-			smp_call_function(flush_ldt, NULL, 1, 1);
+			smp_call_function(flush_ldt, current->mm, 1, 1);
 		preempt_enable();
 		preempt_enable();
 #else
 #else
 		load_LDT(pc);
 		load_LDT(pc);