diff options
| -rw-r--r-- | arch/x86/kernel/cpu/intel.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/microcode/intel.c | 26 |
2 files changed, 4 insertions, 24 deletions
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index fcd484d2bb03..2d49aa949fa1 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
| @@ -83,7 +83,7 @@ static void early_init_intel(struct cpuinfo_x86 *c) | |||
| 83 | 83 | ||
| 84 | wrmsr(MSR_IA32_UCODE_REV, 0, 0); | 84 | wrmsr(MSR_IA32_UCODE_REV, 0, 0); |
| 85 | /* Required by the SDM */ | 85 | /* Required by the SDM */ |
| 86 | sync_core(); | 86 | native_cpuid_eax(1); |
| 87 | rdmsr(MSR_IA32_UCODE_REV, lower_word, c->microcode); | 87 | rdmsr(MSR_IA32_UCODE_REV, lower_word, c->microcode); |
| 88 | } | 88 | } |
| 89 | 89 | ||
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c index b624b54912e1..f79249fab389 100644 --- a/arch/x86/kernel/cpu/microcode/intel.c +++ b/arch/x86/kernel/cpu/microcode/intel.c | |||
| @@ -368,26 +368,6 @@ next: | |||
| 368 | return patch; | 368 | return patch; |
| 369 | } | 369 | } |
| 370 | 370 | ||
| 371 | static void cpuid_1(void) | ||
| 372 | { | ||
| 373 | /* | ||
| 374 | * According to the Intel SDM, Volume 3, 9.11.7: | ||
| 375 | * | ||
| 376 | * CPUID returns a value in a model specific register in | ||
| 377 | * addition to its usual register return values. The | ||
| 378 | * semantics of CPUID cause it to deposit an update ID value | ||
| 379 | * in the 64-bit model-specific register at address 08BH | ||
| 380 | * (IA32_BIOS_SIGN_ID). If no update is present in the | ||
| 381 | * processor, the value in the MSR remains unmodified. | ||
| 382 | * | ||
| 383 | * Use native_cpuid -- this code runs very early and we don't | ||
| 384 | * want to mess with paravirt. | ||
| 385 | */ | ||
| 386 | unsigned int eax = 1, ebx, ecx = 0, edx; | ||
| 387 | |||
| 388 | native_cpuid(&eax, &ebx, &ecx, &edx); | ||
| 389 | } | ||
| 390 | |||
| 391 | static int collect_cpu_info_early(struct ucode_cpu_info *uci) | 371 | static int collect_cpu_info_early(struct ucode_cpu_info *uci) |
| 392 | { | 372 | { |
| 393 | unsigned int val[2]; | 373 | unsigned int val[2]; |
| @@ -413,7 +393,7 @@ static int collect_cpu_info_early(struct ucode_cpu_info *uci) | |||
| 413 | native_wrmsrl(MSR_IA32_UCODE_REV, 0); | 393 | native_wrmsrl(MSR_IA32_UCODE_REV, 0); |
| 414 | 394 | ||
| 415 | /* As documented in the SDM: Do a CPUID 1 here */ | 395 | /* As documented in the SDM: Do a CPUID 1 here */ |
| 416 | cpuid_1(); | 396 | native_cpuid_eax(1); |
| 417 | 397 | ||
| 418 | /* get the current revision from MSR 0x8B */ | 398 | /* get the current revision from MSR 0x8B */ |
| 419 | native_rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); | 399 | native_rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); |
| @@ -613,7 +593,7 @@ static int apply_microcode_early(struct ucode_cpu_info *uci, bool early) | |||
| 613 | native_wrmsrl(MSR_IA32_UCODE_REV, 0); | 593 | native_wrmsrl(MSR_IA32_UCODE_REV, 0); |
| 614 | 594 | ||
| 615 | /* As documented in the SDM: Do a CPUID 1 here */ | 595 | /* As documented in the SDM: Do a CPUID 1 here */ |
| 616 | cpuid_1(); | 596 | native_cpuid_eax(1); |
| 617 | 597 | ||
| 618 | /* get the current revision from MSR 0x8B */ | 598 | /* get the current revision from MSR 0x8B */ |
| 619 | native_rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); | 599 | native_rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); |
| @@ -825,7 +805,7 @@ static int apply_microcode_intel(int cpu) | |||
| 825 | wrmsrl(MSR_IA32_UCODE_REV, 0); | 805 | wrmsrl(MSR_IA32_UCODE_REV, 0); |
| 826 | 806 | ||
| 827 | /* As documented in the SDM: Do a CPUID 1 here */ | 807 | /* As documented in the SDM: Do a CPUID 1 here */ |
| 828 | cpuid_1(); | 808 | native_cpuid_eax(1); |
| 829 | 809 | ||
| 830 | /* get the current revision from MSR 0x8B */ | 810 | /* get the current revision from MSR 0x8B */ |
| 831 | rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); | 811 | rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); |
