]> git.baikalelectronics.ru Git - kernel.git/commitdiff
intel_idle: Fix SPR C6 optimization
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Wed, 27 Apr 2022 06:08:53 +0000 (09:08 +0300)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 27 Apr 2022 18:36:47 +0000 (20:36 +0200)
The Sapphire Rapids (SPR) C6 optimization was added to the end of the
'spr_idle_state_table_update()' function. However, the function has a
'return' which may happen before the optimization has a chance to run.
And this may prevent the optimization from happening.

This is an unlikely scenario, but possible if user boots with, say,
the 'intel_idle.preferred_cstates=6' kernel boot option.

This patch fixes the issue by eliminating the problematic 'return'
statement.

Fixes: c3e064f5f286 ("intel_idle: add core C6 optimization for SPR")
Suggested-by: Jan Beulich <jbeulich@suse.com>
Reported-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
[ rjw: Minor changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/idle/intel_idle.c

index cf5ed4c1d02cdb7bb26099bb41c0a8edcda59a56..47551ab73ca8a03ab60448adb8fe0d8cee9aed5d 100644 (file)
@@ -1581,11 +1581,9 @@ static void __init spr_idle_state_table_update(void)
        unsigned long long msr;
 
        /* Check if user prefers C1E over C1. */
-       if (preferred_states_mask & BIT(2)) {
-               if (preferred_states_mask & BIT(1))
-                       /* Both can't be enabled, stick to the defaults. */
-                       return;
-
+       if ((preferred_states_mask & BIT(2)) &&
+           !(preferred_states_mask & BIT(1))) {
+               /* Disable C1 and enable C1E. */
                spr_cstates[0].flags |= CPUIDLE_FLAG_UNUSABLE;
                spr_cstates[1].flags &= ~CPUIDLE_FLAG_UNUSABLE;