diff options
-rw-r--r-- | arch/x86/kernel/cpu/microcode/intel.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c index 6515c802346a..0f97ae93441b 100644 --- a/arch/x86/kernel/cpu/microcode/intel.c +++ b/arch/x86/kernel/cpu/microcode/intel.c | |||
@@ -793,10 +793,10 @@ void __init load_ucode_intel_bsp(void) | |||
793 | void load_ucode_intel_ap(void) | 793 | void load_ucode_intel_ap(void) |
794 | { | 794 | { |
795 | struct ucode_blobs *blobs_p; | 795 | struct ucode_blobs *blobs_p; |
796 | unsigned long *ptrs, start = 0; | ||
796 | struct mc_saved_data *mcs; | 797 | struct mc_saved_data *mcs; |
797 | struct ucode_cpu_info uci; | 798 | struct ucode_cpu_info uci; |
798 | enum ucode_state ret; | 799 | enum ucode_state ret; |
799 | unsigned long *ptrs; | ||
800 | 800 | ||
801 | #ifdef CONFIG_X86_32 | 801 | #ifdef CONFIG_X86_32 |
802 | mcs = (struct mc_saved_data *)__pa_nodebug(&mc_saved_data); | 802 | mcs = (struct mc_saved_data *)__pa_nodebug(&mc_saved_data); |
@@ -815,8 +815,20 @@ void load_ucode_intel_ap(void) | |||
815 | if (!mcs->num_saved) | 815 | if (!mcs->num_saved) |
816 | return; | 816 | return; |
817 | 817 | ||
818 | if (blobs_p->valid) { | ||
819 | start = blobs_p->start; | ||
820 | |||
821 | #ifdef CONFIG_RANDOMIZE_MEMORY | ||
822 | /* | ||
823 | * Pay attention to CONFIG_RANDOMIZE_MEMORY=y as it shuffles | ||
824 | * physmem mapping too and there we have the initrd. | ||
825 | */ | ||
826 | start += PAGE_OFFSET - __PAGE_OFFSET_BASE; | ||
827 | #endif | ||
828 | } | ||
829 | |||
818 | collect_cpu_info_early(&uci); | 830 | collect_cpu_info_early(&uci); |
819 | ret = load_microcode(mcs, ptrs, blobs_p->start, &uci); | 831 | ret = load_microcode(mcs, ptrs, start, &uci); |
820 | if (ret != UCODE_OK) | 832 | if (ret != UCODE_OK) |
821 | return; | 833 | return; |
822 | 834 | ||