Loading arch/x86/Kconfig +5 −3 Original line number Diff line number Diff line Loading @@ -1366,10 +1366,12 @@ config MICROCODE_DBG default n depends on MICROCODE help Enable code which allows for debugging the microcode loader in a guest. Meaning the patch loading is simulated but everything else Enable code which allows to debug the microcode loader. When running in a guest the patch loading is simulated but everything else related to patch parsing and handling is done as on baremetal with the purpose of debugging solely the software side of things. the purpose of debugging solely the software side of things. On baremetal, it simply dumps additional debugging information during normal operation. You almost certainly want to say n here. Loading arch/x86/kernel/cpu/microcode/amd.c +2 −2 Original line number Diff line number Diff line Loading @@ -322,7 +322,7 @@ static u32 get_patch_level(void) { u32 rev, dummy __always_unused; if (IS_ENABLED(CONFIG_MICROCODE_DBG)) { if (IS_ENABLED(CONFIG_MICROCODE_DBG) && hypervisor_present) { int cpu = smp_processor_id(); if (!microcode_rev[cpu]) { Loading Loading @@ -714,7 +714,7 @@ static bool __apply_microcode_amd(struct microcode_amd *mc, u32 *cur_rev, invlpg(p_addr_end); } if (IS_ENABLED(CONFIG_MICROCODE_DBG)) if (IS_ENABLED(CONFIG_MICROCODE_DBG) && hypervisor_present) microcode_rev[smp_processor_id()] = mc->hdr.patch_id; /* verify patch application was successful */ Loading arch/x86/kernel/cpu/microcode/core.c +12 −4 Original line number Diff line number Diff line Loading @@ -57,6 +57,8 @@ bool force_minrev = IS_ENABLED(CONFIG_MICROCODE_LATE_FORCE_MINREV); u32 base_rev; u32 microcode_rev[NR_CPUS] = {}; bool hypervisor_present; /* * Synchronization. * Loading Loading @@ -117,7 +119,13 @@ bool __init microcode_loader_disabled(void) * Disable when: * * 1) The CPU does not support CPUID. * */ if (!cpuid_feature()) { dis_ucode_ldr = true; return dis_ucode_ldr; } /* * 2) Bit 31 in CPUID[1]:ECX is clear * The bit is reserved for hypervisor use. This is still not * completely accurate as XEN PV guests don't see that CPUID bit Loading @@ -127,9 +135,9 @@ bool __init microcode_loader_disabled(void) * 3) Certain AMD patch levels are not allowed to be * overwritten. */ if (!cpuid_feature() || ((native_cpuid_ecx(1) & BIT(31)) && !IS_ENABLED(CONFIG_MICROCODE_DBG)) || hypervisor_present = native_cpuid_ecx(1) & BIT(31); if ((hypervisor_present && !IS_ENABLED(CONFIG_MICROCODE_DBG)) || amd_check_current_patch_level()) dis_ucode_ldr = true; Loading arch/x86/kernel/cpu/microcode/internal.h +1 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ extern struct early_load_data early_data; extern struct ucode_cpu_info ucode_cpu_info[]; extern u32 microcode_rev[NR_CPUS]; extern u32 base_rev; extern bool hypervisor_present; struct cpio_data find_microcode_in_initrd(const char *path); Loading Loading
arch/x86/Kconfig +5 −3 Original line number Diff line number Diff line Loading @@ -1366,10 +1366,12 @@ config MICROCODE_DBG default n depends on MICROCODE help Enable code which allows for debugging the microcode loader in a guest. Meaning the patch loading is simulated but everything else Enable code which allows to debug the microcode loader. When running in a guest the patch loading is simulated but everything else related to patch parsing and handling is done as on baremetal with the purpose of debugging solely the software side of things. the purpose of debugging solely the software side of things. On baremetal, it simply dumps additional debugging information during normal operation. You almost certainly want to say n here. Loading
arch/x86/kernel/cpu/microcode/amd.c +2 −2 Original line number Diff line number Diff line Loading @@ -322,7 +322,7 @@ static u32 get_patch_level(void) { u32 rev, dummy __always_unused; if (IS_ENABLED(CONFIG_MICROCODE_DBG)) { if (IS_ENABLED(CONFIG_MICROCODE_DBG) && hypervisor_present) { int cpu = smp_processor_id(); if (!microcode_rev[cpu]) { Loading Loading @@ -714,7 +714,7 @@ static bool __apply_microcode_amd(struct microcode_amd *mc, u32 *cur_rev, invlpg(p_addr_end); } if (IS_ENABLED(CONFIG_MICROCODE_DBG)) if (IS_ENABLED(CONFIG_MICROCODE_DBG) && hypervisor_present) microcode_rev[smp_processor_id()] = mc->hdr.patch_id; /* verify patch application was successful */ Loading
arch/x86/kernel/cpu/microcode/core.c +12 −4 Original line number Diff line number Diff line Loading @@ -57,6 +57,8 @@ bool force_minrev = IS_ENABLED(CONFIG_MICROCODE_LATE_FORCE_MINREV); u32 base_rev; u32 microcode_rev[NR_CPUS] = {}; bool hypervisor_present; /* * Synchronization. * Loading Loading @@ -117,7 +119,13 @@ bool __init microcode_loader_disabled(void) * Disable when: * * 1) The CPU does not support CPUID. * */ if (!cpuid_feature()) { dis_ucode_ldr = true; return dis_ucode_ldr; } /* * 2) Bit 31 in CPUID[1]:ECX is clear * The bit is reserved for hypervisor use. This is still not * completely accurate as XEN PV guests don't see that CPUID bit Loading @@ -127,9 +135,9 @@ bool __init microcode_loader_disabled(void) * 3) Certain AMD patch levels are not allowed to be * overwritten. */ if (!cpuid_feature() || ((native_cpuid_ecx(1) & BIT(31)) && !IS_ENABLED(CONFIG_MICROCODE_DBG)) || hypervisor_present = native_cpuid_ecx(1) & BIT(31); if ((hypervisor_present && !IS_ENABLED(CONFIG_MICROCODE_DBG)) || amd_check_current_patch_level()) dis_ucode_ldr = true; Loading
arch/x86/kernel/cpu/microcode/internal.h +1 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ extern struct early_load_data early_data; extern struct ucode_cpu_info ucode_cpu_info[]; extern u32 microcode_rev[NR_CPUS]; extern u32 base_rev; extern bool hypervisor_present; struct cpio_data find_microcode_in_initrd(const char *path); Loading