Merge tag 'efi-urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/mfleming...
authorIngo Molnar <mingo@kernel.org>
Fri, 22 Aug 2014 08:04:15 +0000 (10:04 +0200)
committerIngo Molnar <mingo@kernel.org>
Fri, 22 Aug 2014 08:04:15 +0000 (10:04 +0200)
Pull EFI fixes from Matt Fleming:

 * WARN_ON(!spin_is_locked()) always triggers on non-SMP machines.
   Swap it for the more canonical lockdep_assert_held() which always
   does the right thing - Guenter Roeck

 * Assign the correct value to efi.runtime_version on arm64 so that all
   the runtime services can be invoked - Semen Protsenko

Signed-off-by: Ingo Molnar <mingo@kernel.org>
Documentation/x86/tlb.txt
arch/x86/kernel/entry_32.S
arch/x86/mm/tlb.c

index 2b3a82e69151419239e8b6b8adb29095beb8c423..39d1723267036a5ba7dff02dc82e39d69a1eeae8 100644 (file)
@@ -35,7 +35,7 @@ invlpg instruction (or instructions _near_ it) show up high in
 profiles.  If you believe that individual invalidations being
 called too often, you can lower the tunable:
 
-       /sys/debug/kernel/x86/tlb_single_page_flush_ceiling
+       /sys/kernel/debug/x86/tlb_single_page_flush_ceiling
 
 This will cause us to do the global flush for more cases.
 Lowering it to 0 will disable the use of the individual flushes.
index 47c410d99f5daaae8a7d4f3f00093a6496e099ec..4b0e1dfa222627cd5a36fb7b8f51234508822536 100644 (file)
@@ -683,7 +683,7 @@ END(syscall_badsys)
 sysenter_badsys:
        movl $-ENOSYS,%eax
        jmp sysenter_after_call
-END(syscall_badsys)
+END(sysenter_badsys)
        CFI_ENDPROC
 
 .macro FIXUP_ESPFIX_STACK
index 1fe33987de027f73c2997960198978a557bb1027..ee61c36d64f84dd944873ec0acf80b4f8ad06da7 100644 (file)
@@ -49,7 +49,13 @@ void leave_mm(int cpu)
        if (cpumask_test_cpu(cpu, mm_cpumask(active_mm))) {
                cpumask_clear_cpu(cpu, mm_cpumask(active_mm));
                load_cr3(swapper_pg_dir);
-               trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
+               /*
+                * This gets called in the idle path where RCU
+                * functions differently.  Tracing normally
+                * uses RCU, so we have to call the tracepoint
+                * specially here.
+                */
+               trace_tlb_flush_rcuidle(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
        }
 }
 EXPORT_SYMBOL_GPL(leave_mm);
@@ -174,7 +180,7 @@ void flush_tlb_current_task(void)
  *
  * This is in units of pages.
  */
-unsigned long tlb_single_page_flush_ceiling = 33;
+static unsigned long tlb_single_page_flush_ceiling __read_mostly = 33;
 
 void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
                                unsigned long end, unsigned long vmflag)