فهرست منبع

Merge branch 'x86/urgent' into x86/asm, to pick up dependent fixes

Signed-off-by: Ingo Molnar <mingo@kernel.org>
Ingo Molnar 9 سال پیش
والد
کامیت
49b2410631
3فایلهای تغییر یافته به همراه19 افزوده شده و 3 حذف شده
  1. 18 1
      arch/x86/entry/entry_64.S
  2. 1 0
      arch/x86/kernel/cpu/microcode/core.c
  3. 0 2
      arch/x86/kernel/setup.c

+ 18 - 1
arch/x86/entry/entry_64.S

@@ -509,6 +509,17 @@ END(irq_entries_start)
 	 * tracking that we're in kernel mode.
 	 * tracking that we're in kernel mode.
 	 */
 	 */
 	SWAPGS
 	SWAPGS
+
+	/*
+	 * We need to tell lockdep that IRQs are off.  We can't do this until
+	 * we fix gsbase, and we should do it before enter_from_user_mode
+	 * (which can take locks).  Since TRACE_IRQS_OFF idempotent,
+	 * the simplest way to handle it is to just call it twice if
+	 * we enter from user mode.  There's no reason to optimize this since
+	 * TRACE_IRQS_OFF is a no-op if lockdep is off.
+	 */
+	TRACE_IRQS_OFF
+
 #ifdef CONFIG_CONTEXT_TRACKING
 #ifdef CONFIG_CONTEXT_TRACKING
 	call enter_from_user_mode
 	call enter_from_user_mode
 #endif
 #endif
@@ -1049,12 +1060,18 @@ ENTRY(error_entry)
 	SWAPGS
 	SWAPGS
 
 
 .Lerror_entry_from_usermode_after_swapgs:
 .Lerror_entry_from_usermode_after_swapgs:
+	/*
+	 * We need to tell lockdep that IRQs are off.  We can't do this until
+	 * we fix gsbase, and we should do it before enter_from_user_mode
+	 * (which can take locks).
+	 */
+	TRACE_IRQS_OFF
 #ifdef CONFIG_CONTEXT_TRACKING
 #ifdef CONFIG_CONTEXT_TRACKING
 	call enter_from_user_mode
 	call enter_from_user_mode
 #endif
 #endif
+	ret
 
 
 .Lerror_entry_done:
 .Lerror_entry_done:
-
 	TRACE_IRQS_OFF
 	TRACE_IRQS_OFF
 	ret
 	ret
 
 

+ 1 - 0
arch/x86/kernel/cpu/microcode/core.c

@@ -698,3 +698,4 @@ int __init microcode_init(void)
 	return error;
 	return error;
 
 
 }
 }
+late_initcall(microcode_init);

+ 0 - 2
arch/x86/kernel/setup.c

@@ -1250,8 +1250,6 @@ void __init setup_arch(char **cmdline_p)
 	if (efi_enabled(EFI_BOOT))
 	if (efi_enabled(EFI_BOOT))
 		efi_apply_memmap_quirks();
 		efi_apply_memmap_quirks();
 #endif
 #endif
-
-	microcode_init();
 }
 }
 
 
 #ifdef CONFIG_X86_32
 #ifdef CONFIG_X86_32