Re: [PATCH v4 4/4] intel_idle: Add ibrs_off module parameter to force disable IBRS

From: Waiman Long
Date: Mon Jul 03 2023 - 11:10:15 EST



On 7/3/23 06:32, Peter Zijlstra wrote:
On Tue, Jun 27, 2023 at 10:25:54PM -0400, Waiman Long wrote:

@@ -69,6 +69,7 @@ static int max_cstate = CPUIDLE_STATE_MAX - 1;
static unsigned int disabled_states_mask __read_mostly;
static unsigned int preferred_states_mask __read_mostly;
static bool force_irq_on __read_mostly;
+static bool ibrs_off __read_mostly;
static struct cpuidle_device __percpu *intel_idle_cpuidle_devices;
@@ -1919,12 +1920,15 @@ static void state_update_enter_method(struct cpuidle_state *state, int cstate)
}
if (cpu_feature_enabled(X86_FEATURE_KERNEL_IBRS) &&
- state->flags & CPUIDLE_FLAG_IBRS) {
+ ((state->flags & CPUIDLE_FLAG_IBRS) || ibrs_off)) {
/*
* IBRS mitigation requires that C-states are entered
* with interrupts disabled.
*/
- WARN_ON_ONCE(state->flags & CPUIDLE_FLAG_IRQ_ENABLE);
+ if (ibrs_off && (state->flags & CPUIDLE_FLAG_IRQ_ENABLE))
+ state->flags &= ~CPUIDLE_FLAG_IRQ_ENABLE;
+ else
+ WARN_ON_ONCE(state->flags & CPUIDLE_FLAG_IRQ_ENABLE);
If you're respinning this, you can leave out the else and avoid the
indent on the WARN:

+ if (ibrs_off && (state->flags & CPUIDLE_FLAG_IRQ_ENABLE))
+ state->flags &= ~CPUIDLE_FLAG_IRQ_ENABLE;
WARN_ON_ONCE(state->flags & CPUIDLE_FLAG_IRQ_ENABLE);

Same effect, simpler code and all that.

That is true. I can certainly respin that as there is another suggested doc change that is pending.

Cheers,
Longman