lkml.org 
[lkml]   [2020]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH v4 1/2] cpufreq: intel_pstate: Rearrange the storing of new EPP values
    Date
    "Rafael J. Wysocki" <rjw@rjwysocki.net> writes:

    > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    >
    > 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 <rafael.j.wysocki@intel.com>

    Reviewed-by: Francisco Jerez <currojerez@riseup.net>

    > ---
    >
    > 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(
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2020-07-30 03:33    [W:2.685 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site