Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

cpuidle, intel_idle: Fix CPUIDLE_FLAG_IBRS

objtool to the rescue:

vmlinux.o: warning: objtool: intel_idle_ibrs+0x17: call to spec_ctrl_current() leaves .noinstr.text section
vmlinux.o: warning: objtool: intel_idle_ibrs+0x27: call to wrmsrl.constprop.0() leaves .noinstr.text section

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Tony Lindgren <tony@atomide.com>
Tested-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Frederic Weisbecker <frederic@kernel.org>
Link: https://lore.kernel.org/r/20230112195540.556912863@infradead.org

authored by

Peter Zijlstra and committed by
Ingo Molnar
9b461a6f 821ad23d

+3 -3
+1 -1
arch/x86/kernel/cpu/bugs.c
··· 86 86 wrmsrl(MSR_IA32_SPEC_CTRL, val); 87 87 } 88 88 89 - u64 spec_ctrl_current(void) 89 + noinstr u64 spec_ctrl_current(void) 90 90 { 91 91 return this_cpu_read(x86_spec_ctrl_current); 92 92 }
+2 -2
drivers/idle/intel_idle.c
··· 181 181 int ret; 182 182 183 183 if (smt_active) 184 - wrmsrl(MSR_IA32_SPEC_CTRL, 0); 184 + native_wrmsrl(MSR_IA32_SPEC_CTRL, 0); 185 185 186 186 ret = __intel_idle(dev, drv, index); 187 187 188 188 if (smt_active) 189 - wrmsrl(MSR_IA32_SPEC_CTRL, spec_ctrl); 189 + native_wrmsrl(MSR_IA32_SPEC_CTRL, spec_ctrl); 190 190 191 191 return ret; 192 192 }