diff --git a/kernel.spec b/kernel.spec index 2b0e36f16..b927f2bbf 100644 --- a/kernel.spec +++ b/kernel.spec @@ -675,6 +675,9 @@ Patch26082: kvm-fix-excessive-pages-un-pinning-in-kvm_iommu_map-.patch #rhbz 1157327 Patch26083: quirk-for-Lenovo-Yoga-3-no-rfkill-switch.patch +#rhbz 1159592 +Patch26084: x86-microcode-AMD-Fix-early-ucode-loading-on-32-bit.patch + # git clone ssh://git.fedorahosted.org/git/kernel-arm64.git, git diff master...devel Patch30000: kernel-arm64.patch @@ -1463,6 +1466,9 @@ ApplyPatch kvm-fix-excessive-pages-un-pinning-in-kvm_iommu_map-.patch #rhbz 1157327 ApplyPatch quirk-for-Lenovo-Yoga-3-no-rfkill-switch.patch +#rhbz 1159592 +ApplyPatch x86-microcode-AMD-Fix-early-ucode-loading-on-32-bit.patch + %if 0%{?aarch64patches} ApplyPatch kernel-arm64.patch %ifnarch aarch64 # this is stupid, but i want to notice before secondary koji does. @@ -2331,6 +2337,9 @@ fi # ||----w | # || || %changelog +* Mon Nov 03 2014 Josh Boyer +- Fix early ucode crash on 32-bit AMD machines (rhbz 1159592) + * Thu Oct 30 2014 Josh Boyer - 3.17.2-300 - Linux v3.17.2 diff --git a/x86-microcode-AMD-Fix-early-ucode-loading-on-32-bit.patch b/x86-microcode-AMD-Fix-early-ucode-loading-on-32-bit.patch new file mode 100644 index 000000000..de0960684 --- /dev/null +++ b/x86-microcode-AMD-Fix-early-ucode-loading-on-32-bit.patch @@ -0,0 +1,56 @@ +From 4232c1bb6b7ed45b96d2112e6f151cf5c9c28470 Mon Sep 17 00:00:00 2001 +From: Borislav Petkov +Date: Sat, 1 Nov 2014 11:01:00 +0100 +Subject: [PATCH] x86, microcode, AMD: Fix early ucode loading on 32-bit + +Hi guys, + +please queue this for the next batch to Linus. + +Thanks. +--- + arch/x86/kernel/cpu/microcode/amd_early.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/arch/x86/kernel/cpu/microcode/amd_early.c b/arch/x86/kernel/cpu/microcode/amd_early.c +index 617a9e284245..65bdfb598880 100644 +--- a/arch/x86/kernel/cpu/microcode/amd_early.c ++++ b/arch/x86/kernel/cpu/microcode/amd_early.c +@@ -348,6 +348,7 @@ int __init save_microcode_in_initrd_amd(void) + { + unsigned long cont; + enum ucode_state ret; ++ u8 *cont_va; + u32 eax; + + if (!container) +@@ -355,13 +356,15 @@ int __init save_microcode_in_initrd_amd(void) + + #ifdef CONFIG_X86_32 + get_bsp_sig(); +- cont = (unsigned long)container; ++ cont = (unsigned long)container; ++ cont_va = __va(container); + #else + /* + * We need the physical address of the container for both bitness since + * boot_params.hdr.ramdisk_image is a physical address. + */ +- cont = __pa(container); ++ cont = __pa(container); ++ cont_va = container; + #endif + + /* +@@ -372,6 +375,8 @@ int __init save_microcode_in_initrd_amd(void) + if (relocated_ramdisk) + container = (u8 *)(__va(relocated_ramdisk) + + (cont - boot_params.hdr.ramdisk_image)); ++ else ++ container = cont_va; + + if (ucode_new_rev) + pr_info("microcode: updated early to new patch_level=0x%08x\n", +-- +1.9.3 +