diff options
| author | Borislav Petkov <bp@suse.de> | 2016-02-03 06:33:29 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2016-02-09 05:41:15 -0500 |
| commit | 5f9c01aa7c49a2d74474d6d879a797b8badf29e6 (patch) | |
| tree | 09fb7ab50313ca09e37eba2a328800edb1afd8f6 /arch/x86/kernel/cpu/microcode | |
| parent | 765bdb406de4b6132e349c5d4e077866536a9cc0 (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.c | 14 |
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; |
