aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/cpu/microcode
diff options
context:
space:
mode:
authorBorislav Petkov <bp@suse.de>2016-02-03 06:33:29 -0500
committerIngo Molnar <mingo@kernel.org>2016-02-09 05:41:15 -0500
commit5f9c01aa7c49a2d74474d6d879a797b8badf29e6 (patch)
tree09fb7ab50313ca09e37eba2a328800edb1afd8f6 /arch/x86/kernel/cpu/microcode
parent765bdb406de4b6132e349c5d4e077866536a9cc0 (diff)
x86/microcode: Untangle from BLK_DEV_INITRD
Thomas Voegtle reported that doing oldconfig with a .config which has CONFIG_MICROCODE enabled but BLK_DEV_INITRD disabled prevents the microcode loading mechanism from being built. So untangle it from the BLK_DEV_INITRD dependency so that oldconfig doesn't turn it off and add an explanatory text to its Kconfig help what the supported methods for supplying microcode are. Reported-by: Thomas Voegtle <tv@lio96.de> Tested-by: Thomas Voegtle <tv@lio96.de> Signed-off-by: Borislav Petkov <bp@suse.de> Cc: <stable@vger.kernel.org> # 4.4 Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1454499225-21544-2-git-send-email-bp@alien8.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/kernel/cpu/microcode')
-rw-r--r--arch/x86/kernel/cpu/microcode/intel.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
index ee81c544ee0d..044bbbbcbaf1 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -690,7 +690,7 @@ int __init save_microcode_in_initrd_intel(void)
690 if (count == 0) 690 if (count == 0)
691 return ret; 691 return ret;
692 692
693 copy_initrd_ptrs(mc_saved, mc_saved_in_initrd, initrd_start, count); 693 copy_initrd_ptrs(mc_saved, mc_saved_in_initrd, get_initrd_start(), count);
694 ret = save_microcode(&mc_saved_data, mc_saved, count); 694 ret = save_microcode(&mc_saved_data, mc_saved, count);
695 if (ret) 695 if (ret)
696 pr_err("Cannot save microcode patches from initrd.\n"); 696 pr_err("Cannot save microcode patches from initrd.\n");
@@ -748,20 +748,14 @@ void load_ucode_intel_ap(void)
748 struct mc_saved_data *mc_saved_data_p; 748 struct mc_saved_data *mc_saved_data_p;
749 struct ucode_cpu_info uci; 749 struct ucode_cpu_info uci;
750 unsigned long *mc_saved_in_initrd_p; 750 unsigned long *mc_saved_in_initrd_p;
751 unsigned long initrd_start_addr;
752 enum ucode_state ret; 751 enum ucode_state ret;
753#ifdef CONFIG_X86_32 752#ifdef CONFIG_X86_32
754 unsigned long *initrd_start_p;
755 753
756 mc_saved_in_initrd_p = 754 mc_saved_in_initrd_p = (unsigned long *)__pa_nodebug(mc_saved_in_initrd);
757 (unsigned long *)__pa_nodebug(mc_saved_in_initrd);
758 mc_saved_data_p = (struct mc_saved_data *)__pa_nodebug(&mc_saved_data); 755 mc_saved_data_p = (struct mc_saved_data *)__pa_nodebug(&mc_saved_data);
759 initrd_start_p = (unsigned long *)__pa_nodebug(&initrd_start);
760 initrd_start_addr = (unsigned long)__pa_nodebug(*initrd_start_p);
761#else 756#else
762 mc_saved_data_p = &mc_saved_data;
763 mc_saved_in_initrd_p = mc_saved_in_initrd; 757 mc_saved_in_initrd_p = mc_saved_in_initrd;
764 initrd_start_addr = initrd_start; 758 mc_saved_data_p = &mc_saved_data;
765#endif 759#endif
766 760
767 /* 761 /*
@@ -773,7 +767,7 @@ void load_ucode_intel_ap(void)
773 767
774 collect_cpu_info_early(&uci); 768 collect_cpu_info_early(&uci);
775 ret = load_microcode(mc_saved_data_p, mc_saved_in_initrd_p, 769 ret = load_microcode(mc_saved_data_p, mc_saved_in_initrd_p,
776 initrd_start_addr, &uci); 770 get_initrd_start_addr(), &uci);
777 771
778 if (ret != UCODE_OK) 772 if (ret != UCODE_OK)
779 return; 773 return;