"Rafael J. Wysocki" writes: > From: Rafael J. Wysocki > > Move the locking away from intel_pstate_set_energy_pref_index() > into its only caller and drop the (now redundant) return_pref label > from it. > > Also move the "raw" EPP value check into the caller of that function, > so as to do it before acquiring the mutex, and reduce code duplication > related to the "raw" EPP values processing somewhat. > > No intentional functional impact. > > Signed-off-by: Rafael J. Wysocki Reviewed-by: Francisco Jerez > --- > > v2 -> v3: > > * Fix error handling in intel_pstate_set_energy_pref_index() and > rebase. > > v3 -> v4: No changes > > --- > drivers/cpufreq/intel_pstate.c | 35 +++++++++++++++-------------------- > 1 file changed, 15 insertions(+), 20 deletions(-) > > Index: linux-pm/drivers/cpufreq/intel_pstate.c > =================================================================== > --- linux-pm.orig/drivers/cpufreq/intel_pstate.c > +++ linux-pm/drivers/cpufreq/intel_pstate.c > @@ -649,28 +649,18 @@ static int intel_pstate_set_energy_pref_ > if (!pref_index) > epp = cpu_data->epp_default; > > - mutex_lock(&intel_pstate_limits_lock); > - > if (boot_cpu_has(X86_FEATURE_HWP_EPP)) { > u64 value; > > ret = rdmsrl_on_cpu(cpu_data->cpu, MSR_HWP_REQUEST, &value); > if (ret) > - goto return_pref; > + return ret; > > value &= ~GENMASK_ULL(31, 24); > > - if (use_raw) { > - if (raw_epp > 255) { > - ret = -EINVAL; > - goto return_pref; > - } > - value |= (u64)raw_epp << 24; > - ret = wrmsrl_on_cpu(cpu_data->cpu, MSR_HWP_REQUEST, value); > - goto return_pref; > - } > - > - if (epp == -EINVAL) > + if (use_raw) > + epp = raw_epp; > + else if (epp == -EINVAL) > epp = epp_values[pref_index - 1]; > > value |= (u64)epp << 24; > @@ -680,8 +670,6 @@ static int intel_pstate_set_energy_pref_ > epp = (pref_index - 1) << 2; > ret = intel_pstate_set_epb(cpu_data->cpu, epp); > } > -return_pref: > - mutex_unlock(&intel_pstate_limits_lock); > > return ret; > } > @@ -708,8 +696,8 @@ static ssize_t store_energy_performance_ > struct cpudata *cpu_data = all_cpu_data[policy->cpu]; > char str_preference[21]; > bool raw = false; > + ssize_t ret; > u32 epp = 0; > - int ret; > > ret = sscanf(buf, "%20s", str_preference); > if (ret != 1) > @@ -724,14 +712,21 @@ static ssize_t store_energy_performance_ > if (ret) > return ret; > > + if (epp > 255) > + return -EINVAL; > + > raw = true; > } > > + mutex_lock(&intel_pstate_limits_lock); > + > ret = intel_pstate_set_energy_pref_index(cpu_data, ret, raw, epp); > - if (ret) > - return ret; > + if (!ret) > + ret = count; > > - return count; > + mutex_unlock(&intel_pstate_limits_lock); > + > + return ret; > } > > static ssize_t show_energy_performance_preference(