Currently x86_spec_ctrl_base is read at boot time, and SPEC_CTRL_IBRS bit is set if CONFIG_CPU_IBRS_ENTRY is enabled. There is no change in the bit if CONFIG_CPU_IBRS_ENTRY is not set. This is a problem when kexec-ing a kernel that has the mitigation disabled, from a kernel that has the mitigation enabled. In this case, the MSR bit is carried forward and not cleared at the boot of the new kernel. This might have some performance degradation that is hard to find. This problem does not happen if the machine is (hard) rebooted, because the bit will be cleared by default. Signed-off-by: Breno Leitao <leitao@xxxxxxxxxx> --- arch/x86/kernel/cpu/bugs.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c index 3e3230cccaa7..5b59e850de6e 100644 --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c @@ -1451,6 +1451,9 @@ static void __init spectre_v2_select_mitigation(void) if (spectre_v2_in_ibrs_mode(mode)) { x86_spec_ctrl_base |= SPEC_CTRL_IBRS; write_spec_ctrl_current(x86_spec_ctrl_base, true); + } else { + x86_spec_ctrl_base = x86_spec_ctrl_base & (~SPEC_CTRL_IBRS); + write_spec_ctrl_current(x86_spec_ctrl_base, true); } switch (mode) { -- 2.30.2 _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec