lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJZ5v0iu87EJYfJV+6gTBXkc5B5pfXo97JEfBb_ddOMnMrTCTw@mail.gmail.com>
Date: Wed, 10 Sep 2025 12:08:49 +0200
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: "Rafael J. Wysocki" <rafael@...nel.org>
Cc: Srinivas Pandruvada <srinivas.pandruvada@...ux.intel.com>, viresh.kumar@...aro.org, 
	linux-pm@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 2/2] cpufreq: intel_pstate: Enable HWP without EPP feature

On Sat, Sep 6, 2025 at 6:13 PM Rafael J. Wysocki <rafael@...nel.org> wrote:
>
> On Fri, Sep 5, 2025 at 11:02 PM Rafael J. Wysocki <rafael@...nel.org> wrote:
> >
> > On Thu, Sep 4, 2025 at 2:06 AM Srinivas Pandruvada
> > <srinivas.pandruvada@...ux.intel.com> wrote:
> > >
> > > When EPP feature is not available (CPUID CPUID.06H:EAX[10] is not set),
> > > intel_pstate will not enable HWP.
> > >
> > > Some processors support DEC feature (Dynamic Efficiency Control). But in
> > > this case HWP must be enabled.
> > >
> > > So, enable HWP even if EPP feature is not available but DEC feature is
> > > present.
> > >
> > > When EPP feature is not available don't publish sysfs attributes
> > > "energy_performance_available_preferences" and
> > > "energy_performance_preference", but continue to enable HWP.
> > >
> > > Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@...ux.intel.com>
> > > ---
> > >  drivers/cpufreq/intel_pstate.c | 35 +++++++++++++++++++++++++++++++---
> > >  1 file changed, 32 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
> > > index c28454b16723..d74abe909fbc 100644
> > > --- a/drivers/cpufreq/intel_pstate.c
> > > +++ b/drivers/cpufreq/intel_pstate.c
> > > @@ -904,6 +904,11 @@ static struct freq_attr *hwp_cpufreq_attrs[] = {
> > >         NULL,
> > >  };
> > >
> > > +static struct freq_attr *hwp_cpufreq_default_attrs[] = {
> > > +       &base_frequency,
> > > +       NULL,
> > > +};
> > > +
> > >  static bool no_cas __ro_after_init;
> > >
> > >  static struct cpudata *hybrid_max_perf_cpu __read_mostly;
> > > @@ -1370,6 +1375,9 @@ static void intel_pstate_hwp_offline(struct cpudata *cpu)
> > >  #define POWER_CTL_EE_ENABLE    1
> > >  #define POWER_CTL_EE_DISABLE   2
> > >
> > > +/* Enable bit for Dynamic Efficiency Control (DEC) */
> > > +#define POWER_CTL_DEC_ENABLE   27
> > > +
> > >  static int power_ctl_ee_state;
> > >
> > >  static void set_power_ctl_ee_state(bool input)
> > > @@ -3761,6 +3769,17 @@ static const struct x86_cpu_id intel_hybrid_scaling_factor[] = {
> > >         {}
> > >  };
> > >
> > > +static bool dec_enabled(void)
> > > +{
> > > +       u64 power_ctl;
> > > +
> > > +       rdmsrq(MSR_IA32_POWER_CTL, power_ctl);
> > > +       if (power_ctl & BIT(POWER_CTL_DEC_ENABLE))
> > > +               return true;
> > > +
> > > +       return false;
> > > +}
> > > +
> > >  static int __init intel_pstate_init(void)
> > >  {
> > >         static struct cpudata **_all_cpu_data;
> > > @@ -3793,15 +3812,24 @@ static int __init intel_pstate_init(void)
> > >                  * Avoid enabling HWP for processors without EPP support,
> > >                  * because that means incomplete HWP implementation which is a
> > >                  * corner case and supporting it is generally problematic.
> > > +                * But when DEC enable bit is set (MSR 0x1FC bit 27), continue
> > > +                * to enable HWP.
> > >                  *
> > >                  * If HWP is enabled already, though, there is no choice but to
> > >                  * deal with it.
> > >                  */
> > > -               if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) || hwp_forced) {
> > > +               if (!no_hwp || hwp_forced) {
> > > +                       if (boot_cpu_has(X86_FEATURE_HWP_EPP)) {
> > > +                               intel_pstate.attr = hwp_cpufreq_attrs;
> > > +                               intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > +                       } else if (dec_enabled()) {
> > > +                               intel_pstate.attr = hwp_cpufreq_default_attrs;
> > > +                               intel_cpufreq.attr = hwp_cpufreq_default_attrs;
> > > +                       } else {
> > > +                               goto skip_hwp_enable;
> > > +                       }
> > >                         hwp_active = true;
> > >                         hwp_mode_bdw = id->driver_data;
> > > -                       intel_pstate.attr = hwp_cpufreq_attrs;
> > > -                       intel_cpufreq.attr = hwp_cpufreq_attrs;
> > >                         intel_cpufreq.flags |= CPUFREQ_NEED_UPDATE_LIMITS;
> > >                         intel_cpufreq.adjust_perf = intel_cpufreq_adjust_perf;
> > >                         if (!default_driver)
> > > @@ -3811,6 +3839,7 @@ static int __init intel_pstate_init(void)
> > >
> > >                         goto hwp_cpu_matched;
> > >                 }
> > > +skip_hwp_enable:
> > >                 pr_info("HWP not enabled\n");
> > >         } else {
> > >                 if (no_load)
> > > --
> >
> > I think that this would work, but then it looks super ad hoc and I'd
> > like to completely rearrange it.
> >
> > My (totally untested) version is attached.  Please let me know if this
> > can be made work for you and if so, I'll turn it into a proper patch.
>
> Bah, the EPP-related attributes need to be hidden when EPP is not
> there, even if hwp_forced is set.
>
> Attached is a new version, please let me know if it works for you.

Any chance to have a look at the latest patch?

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ