2021-09-09 04:12:13

by Doug Smythies

[permalink] [raw]
Subject: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

If HWP has been already been enabled by BIOS, it may be
necessary to override some kernel command line parameters.
Once it has been enabled it requires a reset to be disabled.

Signed-off-by: Doug Smythies <[email protected]>
---
drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index bb4549959b11..073bae5d4498 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
*/
if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
intel_pstate_hwp_is_enabled()) {
- hwp_active++;
+ hwp_active = 1;
hwp_mode_bdw = id->driver_data;
intel_pstate.attr = hwp_cpufreq_attrs;
intel_cpufreq.attr = hwp_cpufreq_attrs;
@@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);

static int __init intel_pstate_setup(char *str)
{
+ /*
+ * If BIOS is forcing HWP, then parameter
+ * overrides might be needed. Only print
+ * the message once, and regardless of
+ * any overrides.
+ */
+ if(!hwp_active && boot_cpu_has(X86_FEATURE_HWP))
+ if(intel_pstate_hwp_is_enabled()){
+ pr_info("HWP enabled by BIOS\n");
+ hwp_active = 1;
+ }
if (!str)
return -EINVAL;

- if (!strcmp(str, "disable"))
+ if (!strcmp(str, "disable") && !hwp_active)
no_load = 1;
- else if (!strcmp(str, "active"))
+ if (!strcmp(str, "active"))
default_driver = &intel_pstate;
- else if (!strcmp(str, "passive"))
+ if (!strcmp(str, "passive"))
default_driver = &intel_cpufreq;
-
- if (!strcmp(str, "no_hwp")) {
+ if (!strcmp(str, "no_hwp") && !hwp_active) {
pr_info("HWP disabled\n");
no_hwp = 1;
}
--
2.25.1


2021-09-09 06:41:30

by srinivas pandruvada

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> If HWP has been already been enabled by BIOS, it may be
> necessary to override some kernel command line parameters.
> Once it has been enabled it requires a reset to be disabled.
>
> Signed-off-by: Doug Smythies <[email protected]>
> ---
>  drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
>  1 file changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/cpufreq/intel_pstate.c
> b/drivers/cpufreq/intel_pstate.c
> index bb4549959b11..073bae5d4498 100644
> --- a/drivers/cpufreq/intel_pstate.c
> +++ b/drivers/cpufreq/intel_pstate.c
> @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
>                  */
>                 if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
>                     intel_pstate_hwp_is_enabled()) {
> -                       hwp_active++;
> +                       hwp_active = 1;
Why this change?

>                         hwp_mode_bdw = id->driver_data;
>                         intel_pstate.attr = hwp_cpufreq_attrs;
>                         intel_cpufreq.attr = hwp_cpufreq_attrs;
> @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
>  
>  static int __init intel_pstate_setup(char *str)
>  {
> +       /*
> +        * If BIOS is forcing HWP, then parameter
> +        * overrides might be needed. Only print
> +        * the message once, and regardless of
> +        * any overrides.
> +        */
> +       if(!hwp_active 
This part of code is from early_param, Is it possible that
hwp_active is not 0?

> && boot_cpu_has(X86_FEATURE_HWP))
> +               if(intel_pstate_hwp_is_enabled()){
> +                       pr_info("HWP enabled by BIOS\n");
> +                       hwp_active = 1;
> +               }
>         if (!str)
>                 return -EINVAL;
>  
> -       if (!strcmp(str, "disable"))
> +       if (!strcmp(str, "disable") && !hwp_active)
>                 no_load = 1;
> -       else if (!strcmp(str, "active"))
> +       if (!strcmp(str, "active"))
>                 default_driver = &intel_pstate;
> -       else if (!strcmp(str, "passive"))
> +       if (!strcmp(str, "passive"))
>                 default_driver = &intel_cpufreq;

Why "else if" changed to "if" ?


Thanks,
Srinivas

> -
> -       if (!strcmp(str, "no_hwp")) {
> +       if (!strcmp(str, "no_hwp") && !hwp_active) {
>                 pr_info("HWP disabled\n");
>                 no_hwp = 1;
>         }


2021-09-09 11:24:20

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Thu, Sep 9, 2021 at 8:52 AM Srinivas Pandruvada
<[email protected]> wrote:
>
> On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > If HWP has been already been enabled by BIOS, it may be
> > necessary to override some kernel command line parameters.
> > Once it has been enabled it requires a reset to be disabled.
> >
> > Signed-off-by: Doug Smythies <[email protected]>
> > ---
> > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > 1 file changed, 16 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/cpufreq/intel_pstate.c
> > b/drivers/cpufreq/intel_pstate.c
> > index bb4549959b11..073bae5d4498 100644
> > --- a/drivers/cpufreq/intel_pstate.c
> > +++ b/drivers/cpufreq/intel_pstate.c
> > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > */
> > if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > intel_pstate_hwp_is_enabled()) {
> > - hwp_active++;
> > + hwp_active = 1;
> Why this change?

I think hwp_active can be changed to bool and then it would make sense
to update this line.

> > hwp_mode_bdw = id->driver_data;
> > intel_pstate.attr = hwp_cpufreq_attrs;
> > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> >
> > static int __init intel_pstate_setup(char *str)
> > {
> > + /*
> > + * If BIOS is forcing HWP, then parameter
> > + * overrides might be needed. Only print
> > + * the message once, and regardless of
> > + * any overrides.
> > + */
> > + if(!hwp_active
> This part of code is from early_param, Is it possible that
> hwp_active is not 0?

Well, it wouldn't matter even if it were nonzero. This check is just
pointless anyway.

> > && boot_cpu_has(X86_FEATURE_HWP))
> > + if(intel_pstate_hwp_is_enabled()){

This should be

if (boot_cpu_has(X86_FEATURE_HWP) && intel_pstate_hwp_is_enabled()) {

> > + pr_info("HWP enabled by BIOS\n");
> > + hwp_active = 1;
> > + }
> > if (!str)
> > return -EINVAL;
> >
> > - if (!strcmp(str, "disable"))
> > + if (!strcmp(str, "disable") && !hwp_active)
> > no_load = 1;
> > - else if (!strcmp(str, "active"))
> > + if (!strcmp(str, "active"))
> > default_driver = &intel_pstate;
> > - else if (!strcmp(str, "passive"))
> > + if (!strcmp(str, "passive"))
> > default_driver = &intel_cpufreq;
>
> Why "else if" changed to "if" ?
>
> > -
> > - if (!strcmp(str, "no_hwp")) {
> > + if (!strcmp(str, "no_hwp") && !hwp_active) {
> > pr_info("HWP disabled\n");
> > no_hwp = 1;
> > }
>

2021-09-09 14:31:51

by Doug Smythies

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Thu, Sep 9, 2021 at 4:18 AM Rafael J. Wysocki <[email protected]> wrote:
>
> On Thu, Sep 9, 2021 at 8:52 AM Srinivas Pandruvada
> <[email protected]> wrote:
> >
> > On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > > If HWP has been already been enabled by BIOS, it may be
> > > necessary to override some kernel command line parameters.
> > > Once it has been enabled it requires a reset to be disabled.
> > >
> > > Signed-off-by: Doug Smythies <[email protected]>
> > > ---
> > > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > > 1 file changed, 16 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/drivers/cpufreq/intel_pstate.c
> > > b/drivers/cpufreq/intel_pstate.c
> > > index bb4549959b11..073bae5d4498 100644
> > > --- a/drivers/cpufreq/intel_pstate.c
> > > +++ b/drivers/cpufreq/intel_pstate.c
> > > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > > */
> > > if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > > intel_pstate_hwp_is_enabled()) {
> > > - hwp_active++;
> > > + hwp_active = 1;
> > Why this change?
>
> I think hwp_active can be changed to bool and then it would make sense
> to update this line.
>
> > > hwp_mode_bdw = id->driver_data;
> > > intel_pstate.attr = hwp_cpufreq_attrs;
> > > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> > >
> > > static int __init intel_pstate_setup(char *str)
> > > {
> > > + /*
> > > + * If BIOS is forcing HWP, then parameter
> > > + * overrides might be needed. Only print
> > > + * the message once, and regardless of
> > > + * any overrides.
> > > + */
> > > + if(!hwp_active
> > This part of code is from early_param, Is it possible that
> > hwp_active is not 0?
>
> Well, it wouldn't matter even if it were nonzero. This check is just
> pointless anyway.
>
> > > && boot_cpu_has(X86_FEATURE_HWP))
> > > + if(intel_pstate_hwp_is_enabled()){
>
> This should be
>
> if (boot_cpu_has(X86_FEATURE_HWP) && intel_pstate_hwp_is_enabled()) {

Disagree.
This routine gets executed once per intel_pstate related grub command
line entry. The purpose of the "if(!hwp_active" part is to prevent the
printing of the message to the logs multiple times.

>
> > > + pr_info("HWP enabled by BIOS\n");
> > > + hwp_active = 1;
> > > + }
> > > if (!str)
> > > return -EINVAL;
> > >
> > > - if (!strcmp(str, "disable"))
> > > + if (!strcmp(str, "disable") && !hwp_active)
> > > no_load = 1;
> > > - else if (!strcmp(str, "active"))
> > > + if (!strcmp(str, "active"))
> > > default_driver = &intel_pstate;
> > > - else if (!strcmp(str, "passive"))
> > > + if (!strcmp(str, "passive"))
> > > default_driver = &intel_cpufreq;
> >
> > Why "else if" changed to "if" ?
> >
> > > -
> > > - if (!strcmp(str, "no_hwp")) {
> > > + if (!strcmp(str, "no_hwp") && !hwp_active) {
> > > pr_info("HWP disabled\n");
> > > no_hwp = 1;
> > > }
> >

2021-09-09 14:34:16

by Doug Smythies

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Wed, Sep 8, 2021 at 11:33 PM Srinivas Pandruvada
<[email protected]> wrote:
>
> On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > If HWP has been already been enabled by BIOS, it may be
> > necessary to override some kernel command line parameters.
> > Once it has been enabled it requires a reset to be disabled.
> >
> > Signed-off-by: Doug Smythies <[email protected]>
> > ---
> > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > 1 file changed, 16 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/cpufreq/intel_pstate.c
> > b/drivers/cpufreq/intel_pstate.c
> > index bb4549959b11..073bae5d4498 100644
> > --- a/drivers/cpufreq/intel_pstate.c
> > +++ b/drivers/cpufreq/intel_pstate.c
> > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > */
> > if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > intel_pstate_hwp_is_enabled()) {
> > - hwp_active++;
> > + hwp_active = 1;
> Why this change?

It was just to keep it at 1, but I agree not absolutely needed.

>
> > hwp_mode_bdw = id->driver_data;
> > intel_pstate.attr = hwp_cpufreq_attrs;
> > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> >
> > static int __init intel_pstate_setup(char *str)
> > {
> > + /*
> > + * If BIOS is forcing HWP, then parameter
> > + * overrides might be needed. Only print
> > + * the message once, and regardless of
> > + * any overrides.
> > + */
> > + if(!hwp_active
> This part of code is from early_param, Is it possible that
> hwp_active is not 0?

Not at this point, in any testing I did.
But I do not know the authoritative answer
to your question.

>
> > && boot_cpu_has(X86_FEATURE_HWP))
> > + if(intel_pstate_hwp_is_enabled()){
> > + pr_info("HWP enabled by BIOS\n");
> > + hwp_active = 1;
> > + }
> > if (!str)
> > return -EINVAL;
> >
> > - if (!strcmp(str, "disable"))
> > + if (!strcmp(str, "disable") && !hwp_active)
> > no_load = 1;
> > - else if (!strcmp(str, "active"))
> > + if (!strcmp(str, "active"))
> > default_driver = &intel_pstate;
> > - else if (!strcmp(str, "passive"))
> > + if (!strcmp(str, "passive"))
> > default_driver = &intel_cpufreq;
>
> Why "else if" changed to "if" ?

Because it doesn't matter anyway and I would
have had to figure out another qualifier.
This way, and given that this executes once per
intel_pstate command line parameter, the code
executes the way it used to, overall.

>
>
> Thanks,
> Srinivas
>
> > -
> > - if (!strcmp(str, "no_hwp")) {
> > + if (!strcmp(str, "no_hwp") && !hwp_active) {
> > pr_info("HWP disabled\n");
> > no_hwp = 1;
> > }
>
>

2021-09-09 14:57:28

by srinivas pandruvada

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Thu, 2021-09-09 at 06:30 -0700, Doug Smythies wrote:
> On Wed, Sep 8, 2021 at 11:33 PM Srinivas Pandruvada
> <[email protected]> wrote:
> >
> > On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > > If HWP has been already been enabled by BIOS, it may be
> > > necessary to override some kernel command line parameters.
> > > Once it has been enabled it requires a reset to be disabled.
> > >
> > > Signed-off-by: Doug Smythies <[email protected]>
> > > ---
> > >  drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > >  1 file changed, 16 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/drivers/cpufreq/intel_pstate.c
> > > b/drivers/cpufreq/intel_pstate.c
> > > index bb4549959b11..073bae5d4498 100644
> > > --- a/drivers/cpufreq/intel_pstate.c
> > > +++ b/drivers/cpufreq/intel_pstate.c
> > > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > >                  */
> > >                 if ((!no_hwp &&
> > > boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > >                     intel_pstate_hwp_is_enabled()) {
> > > -                       hwp_active++;
> > > +                       hwp_active = 1;
> > Why this change?
>
> It was just to keep it at 1, but I agree not absolutely needed.
>
> >
> > >                         hwp_mode_bdw = id->driver_data;
> > >                         intel_pstate.attr = hwp_cpufreq_attrs;
> > >                         intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> > >
> > >  static int __init intel_pstate_setup(char *str)
> > >  {
> > > +       /*
> > > +        * If BIOS is forcing HWP, then parameter
> > > +        * overrides might be needed. Only print
> > > +        * the message once, and regardless of
> > > +        * any overrides.
> > > +        */
> > > +       if(!hwp_active
> > This part of code is from early_param, Is it possible that
> > hwp_active is not 0?
>
> Not at this point, in any testing I did.
> But I do not know the authoritative answer
> to your question.
>
But as you explained you want to prevent repeated print of
"HWP enabled by BIOS". So you need this.

> >
> > > && boot_cpu_has(X86_FEATURE_HWP))
> > > +               if(intel_pstate_hwp_is_enabled()){
> > > +                       pr_info("HWP enabled by BIOS\n");
> > > +                       hwp_active = 1;
> > > +               }
> > >         if (!str)
> > >                 return -EINVAL;
> > >
> > > -       if (!strcmp(str, "disable"))
> > > +       if (!strcmp(str, "disable") && !hwp_active)
> > >                 no_load = 1;
> > > -       else if (!strcmp(str, "active"))
> > > +       if (!strcmp(str, "active"))
> > >                 default_driver = &intel_pstate;
> > > -       else if (!strcmp(str, "passive"))
> > > +       if (!strcmp(str, "passive"))
> > >                 default_driver = &intel_cpufreq;
> >
> > Why "else if" changed to "if" ?
>
> Because it doesn't matter anyway and I would
> have had to figure out another qualifier.
> This way, and given that this executes once per
> intel_pstate command line parameter, the code
> executes the way it used to, overall.
If someone specified intel_pstate=active, it will also compare with
"passive" with this change.

Thanks,
Srinivas

>
> >
> >
> > Thanks,
> > Srinivas
> >
> > > -
> > > -       if (!strcmp(str, "no_hwp")) {
> > > +       if (!strcmp(str, "no_hwp") && !hwp_active) {
> > >                 pr_info("HWP disabled\n");
> > >                 no_hwp = 1;
> > >         }
> >
> >


2021-09-09 16:14:30

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Thu, Sep 9, 2021 at 3:20 PM Doug Smythies <[email protected]> wrote:
>
> On Thu, Sep 9, 2021 at 4:18 AM Rafael J. Wysocki <[email protected]> wrote:
> >
> > On Thu, Sep 9, 2021 at 8:52 AM Srinivas Pandruvada
> > <[email protected]> wrote:
> > >
> > > On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > > > If HWP has been already been enabled by BIOS, it may be
> > > > necessary to override some kernel command line parameters.
> > > > Once it has been enabled it requires a reset to be disabled.
> > > >
> > > > Signed-off-by: Doug Smythies <[email protected]>
> > > > ---
> > > > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > > > 1 file changed, 16 insertions(+), 6 deletions(-)
> > > >
> > > > diff --git a/drivers/cpufreq/intel_pstate.c
> > > > b/drivers/cpufreq/intel_pstate.c
> > > > index bb4549959b11..073bae5d4498 100644
> > > > --- a/drivers/cpufreq/intel_pstate.c
> > > > +++ b/drivers/cpufreq/intel_pstate.c
> > > > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > > > */
> > > > if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > > > intel_pstate_hwp_is_enabled()) {
> > > > - hwp_active++;
> > > > + hwp_active = 1;
> > > Why this change?
> >
> > I think hwp_active can be changed to bool and then it would make sense
> > to update this line.
> >
> > > > hwp_mode_bdw = id->driver_data;
> > > > intel_pstate.attr = hwp_cpufreq_attrs;
> > > > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> > > >
> > > > static int __init intel_pstate_setup(char *str)
> > > > {
> > > > + /*
> > > > + * If BIOS is forcing HWP, then parameter
> > > > + * overrides might be needed. Only print
> > > > + * the message once, and regardless of
> > > > + * any overrides.
> > > > + */
> > > > + if(!hwp_active
> > > This part of code is from early_param, Is it possible that
> > > hwp_active is not 0?
> >
> > Well, it wouldn't matter even if it were nonzero. This check is just
> > pointless anyway.
> >
> > > > && boot_cpu_has(X86_FEATURE_HWP))
> > > > + if(intel_pstate_hwp_is_enabled()){
> >
> > This should be
> >
> > if (boot_cpu_has(X86_FEATURE_HWP) && intel_pstate_hwp_is_enabled()) {
>
> Disagree.
> This routine gets executed once per intel_pstate related grub command
> line entry. The purpose of the "if(!hwp_active" part is to prevent the
> printing of the message to the logs multiple times.

Ah OK. Fair enough.

You can do all of the checks in one conditional, though. They will be
processed left-to-right anyway.

But then it would be good to avoid calling
intel_pstate_hwp_is_enabled() multiple times if it returns false.

And having said all that I'm not sure why you are trying to make
no_hwp depend on !hwp_active? I will not be taken into account anyway
if intel_pstate_hwp_is_enabled() returns 'true'?

So if no_hwp is covered regardless, you may move the
intel_pstate_hwp_is_enabled() inside the no_load conditional.

Alternatively, and I would do that, intel_pstate_hwp_is_enabled()
could be evaluated earlier in intel_pstate_init() and if it returned
'true', both no_load and no_hwp would be disregarded.

2021-09-09 17:23:37

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Thu, Sep 9, 2021 at 6:12 PM Rafael J. Wysocki <[email protected]> wrote:
>
> On Thu, Sep 9, 2021 at 3:20 PM Doug Smythies <[email protected]> wrote:
> >
> > On Thu, Sep 9, 2021 at 4:18 AM Rafael J. Wysocki <[email protected]> wrote:
> > >
> > > On Thu, Sep 9, 2021 at 8:52 AM Srinivas Pandruvada
> > > <[email protected]> wrote:
> > > >
> > > > On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > > > > If HWP has been already been enabled by BIOS, it may be
> > > > > necessary to override some kernel command line parameters.
> > > > > Once it has been enabled it requires a reset to be disabled.
> > > > >
> > > > > Signed-off-by: Doug Smythies <[email protected]>
> > > > > ---
> > > > > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > > > > 1 file changed, 16 insertions(+), 6 deletions(-)
> > > > >
> > > > > diff --git a/drivers/cpufreq/intel_pstate.c
> > > > > b/drivers/cpufreq/intel_pstate.c
> > > > > index bb4549959b11..073bae5d4498 100644
> > > > > --- a/drivers/cpufreq/intel_pstate.c
> > > > > +++ b/drivers/cpufreq/intel_pstate.c
> > > > > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > > > > */
> > > > > if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > > > > intel_pstate_hwp_is_enabled()) {
> > > > > - hwp_active++;
> > > > > + hwp_active = 1;
> > > > Why this change?
> > >
> > > I think hwp_active can be changed to bool and then it would make sense
> > > to update this line.
> > >
> > > > > hwp_mode_bdw = id->driver_data;
> > > > > intel_pstate.attr = hwp_cpufreq_attrs;
> > > > > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > > > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> > > > >
> > > > > static int __init intel_pstate_setup(char *str)
> > > > > {
> > > > > + /*
> > > > > + * If BIOS is forcing HWP, then parameter
> > > > > + * overrides might be needed. Only print
> > > > > + * the message once, and regardless of
> > > > > + * any overrides.
> > > > > + */
> > > > > + if(!hwp_active
> > > > This part of code is from early_param, Is it possible that
> > > > hwp_active is not 0?
> > >
> > > Well, it wouldn't matter even if it were nonzero. This check is just
> > > pointless anyway.
> > >
> > > > > && boot_cpu_has(X86_FEATURE_HWP))
> > > > > + if(intel_pstate_hwp_is_enabled()){
> > >
> > > This should be
> > >
> > > if (boot_cpu_has(X86_FEATURE_HWP) && intel_pstate_hwp_is_enabled()) {
> >
> > Disagree.
> > This routine gets executed once per intel_pstate related grub command
> > line entry. The purpose of the "if(!hwp_active" part is to prevent the
> > printing of the message to the logs multiple times.
>
> Ah OK. Fair enough.
>
> You can do all of the checks in one conditional, though. They will be
> processed left-to-right anyway.
>
> But then it would be good to avoid calling
> intel_pstate_hwp_is_enabled() multiple times if it returns false.
>
> And having said all that I'm not sure why you are trying to make
> no_hwp depend on !hwp_active? I will not be taken into account anyway
> if intel_pstate_hwp_is_enabled() returns 'true'?
>
> So if no_hwp is covered regardless, you may move the
> intel_pstate_hwp_is_enabled() inside the no_load conditional.
>
> Alternatively, and I would do that, intel_pstate_hwp_is_enabled()
> could be evaluated earlier in intel_pstate_init() and if it returned
> 'true', both no_load and no_hwp would be disregarded.

Something like the attached, for the record.


Attachments:
intel_pstate-arguments.patch (1.43 kB)

2021-09-10 03:15:35

by Doug Smythies

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Thu, Sep 9, 2021 at 10:22 AM Rafael J. Wysocki <[email protected]> wrote:
> On Thu, Sep 9, 2021 at 6:12 PM Rafael J. Wysocki <[email protected]> wrote:
> > On Thu, Sep 9, 2021 at 3:20 PM Doug Smythies <[email protected]> wrote:
> > > On Thu, Sep 9, 2021 at 4:18 AM Rafael J. Wysocki <[email protected]> wrote:
> > > > On Thu, Sep 9, 2021 at 8:52 AM Srinivas Pandruvada
> > > > <[email protected]> wrote:
> > > > >
> > > > > On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > > > > > If HWP has been already been enabled by BIOS, it may be
> > > > > > necessary to override some kernel command line parameters.
> > > > > > Once it has been enabled it requires a reset to be disabled.
> > > > > >
> > > > > > Signed-off-by: Doug Smythies <[email protected]>
> > > > > > ---
> > > > > > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > > > > > 1 file changed, 16 insertions(+), 6 deletions(-)
> > > > > >
> > > > > > diff --git a/drivers/cpufreq/intel_pstate.c
> > > > > > b/drivers/cpufreq/intel_pstate.c
> > > > > > index bb4549959b11..073bae5d4498 100644
> > > > > > --- a/drivers/cpufreq/intel_pstate.c
> > > > > > +++ b/drivers/cpufreq/intel_pstate.c
> > > > > > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > > > > > */
> > > > > > if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > > > > > intel_pstate_hwp_is_enabled()) {
> > > > > > - hwp_active++;
> > > > > > + hwp_active = 1;
> > > > > Why this change?
> > > >
> > > > I think hwp_active can be changed to bool and then it would make sense
> > > > to update this line.
> > > >
> > > > > > hwp_mode_bdw = id->driver_data;
> > > > > > intel_pstate.attr = hwp_cpufreq_attrs;
> > > > > > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > > > > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> > > > > >
> > > > > > static int __init intel_pstate_setup(char *str)
> > > > > > {
> > > > > > + /*
> > > > > > + * If BIOS is forcing HWP, then parameter
> > > > > > + * overrides might be needed. Only print
> > > > > > + * the message once, and regardless of
> > > > > > + * any overrides.
> > > > > > + */
> > > > > > + if(!hwp_active
> > > > > This part of code is from early_param, Is it possible that
> > > > > hwp_active is not 0?
> > > >
> > > > Well, it wouldn't matter even if it were nonzero. This check is just
> > > > pointless anyway.
> > > >
> > > > > > && boot_cpu_has(X86_FEATURE_HWP))
> > > > > > + if(intel_pstate_hwp_is_enabled()){
> > > >
> > > > This should be
> > > >
> > > > if (boot_cpu_has(X86_FEATURE_HWP) && intel_pstate_hwp_is_enabled()) {
> > >
> > > Disagree.
> > > This routine gets executed once per intel_pstate related grub command
> > > line entry. The purpose of the "if(!hwp_active" part is to prevent the
> > > printing of the message to the logs multiple times.
> >
> > Ah OK. Fair enough.
> >
> > You can do all of the checks in one conditional, though. They will be
> > processed left-to-right anyway.
> >
> > But then it would be good to avoid calling
> > intel_pstate_hwp_is_enabled() multiple times if it returns false.
> >
> > And having said all that I'm not sure why you are trying to make
> > no_hwp depend on !hwp_active? I will not be taken into account anyway
> > if intel_pstate_hwp_is_enabled() returns 'true'?
> >
> > So if no_hwp is covered regardless, you may move the
> > intel_pstate_hwp_is_enabled() inside the no_load conditional.
> >
> > Alternatively, and I would do that, intel_pstate_hwp_is_enabled()
> > could be evaluated earlier in intel_pstate_init() and if it returned
> > 'true', both no_load and no_hwp would be disregarded.
>
> Something like the attached, for the record.

O.K. and Thanks.
I was trying to avoid this line getting into the log:

[ 0.000000] intel_pstate: HWP disabled

only to overridden later by, now, these lines:

[ 0.373742] intel_pstate: HWP enabled by BIOS
[ 0.374177] intel_pstate: Intel P-state driver initializing
[ 0.375097] intel_pstate: HWP enabled

Let me see if I can go with your suggestion and get to
what I had hoped to get in the logs.

By the way, my current command line options are:

[ 0.000000] Command line:
BOOT_IMAGE=/boot/vmlinuz-5.14.0-ipstate9
root=UUID=0ac356c1-caa9-4c2e-8229-4408bd998dbd
ro ipv6.disable=1 consoleblank=314 intel_pstate=force
intel_pstate=active intel_pstate=no_hwp
msr.allow_writes=on cpuidle.governor=teo

... Doug

2021-09-10 04:15:17

by Doug Smythies

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Thu, Sep 9, 2021 at 7:53 AM Srinivas Pandruvada
<[email protected]> wrote:

> On Thu, 2021-09-09 at 06:30 -0700, Doug Smythies wrote:
> > On Wed, Sep 8, 2021 at 11:33 PM Srinivas Pandruvada
> > <[email protected]> wrote:
> > >
> > > On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > > > If HWP has been already been enabled by BIOS, it may be
> > > > necessary to override some kernel command line parameters.
> > > > Once it has been enabled it requires a reset to be disabled.
> > > >
> > > > Signed-off-by: Doug Smythies <[email protected]>
> > > > ---
> > > > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > > > 1 file changed, 16 insertions(+), 6 deletions(-)
> > > >
> > > > diff --git a/drivers/cpufreq/intel_pstate.c
> > > > b/drivers/cpufreq/intel_pstate.c
> > > > index bb4549959b11..073bae5d4498 100644
> > > > --- a/drivers/cpufreq/intel_pstate.c
> > > > +++ b/drivers/cpufreq/intel_pstate.c
> > > > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > > > */
> > > > if ((!no_hwp &&
> > > > boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > > > intel_pstate_hwp_is_enabled()) {
> > > > - hwp_active++;
> > > > + hwp_active = 1;
> > > Why this change?
> >
> > It was just to keep it at 1, but I agree not absolutely needed.
> >
> > >
> > > > hwp_mode_bdw = id->driver_data;
> > > > intel_pstate.attr = hwp_cpufreq_attrs;
> > > > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> > > >
> > > > static int __init intel_pstate_setup(char *str)
> > > > {
> > > > + /*
> > > > + * If BIOS is forcing HWP, then parameter
> > > > + * overrides might be needed. Only print
> > > > + * the message once, and regardless of
> > > > + * any overrides.
> > > > + */
> > > > + if(!hwp_active
> > > This part of code is from early_param, Is it possible that
> > > hwp_active is not 0?
> >
> > Not at this point, in any testing I did.
> > But I do not know the authoritative answer
> > to your question.
> >
> But as you explained you want to prevent repeated print of
> "HWP enabled by BIOS". So you need this.
>
> > >
> > > > && boot_cpu_has(X86_FEATURE_HWP))
> > > > + if(intel_pstate_hwp_is_enabled()){
> > > > + pr_info("HWP enabled by BIOS\n");
> > > > + hwp_active = 1;
> > > > + }
> > > > if (!str)
> > > > return -EINVAL;
> > > >
> > > > - if (!strcmp(str, "disable"))
> > > > + if (!strcmp(str, "disable") && !hwp_active)
> > > > no_load = 1;
> > > > - else if (!strcmp(str, "active"))
> > > > + if (!strcmp(str, "active"))
> > > > default_driver = &intel_pstate;
> > > > - else if (!strcmp(str, "passive"))
> > > > + if (!strcmp(str, "passive"))
> > > > default_driver = &intel_cpufreq;
> > >
> > > Why "else if" changed to "if" ?
> >
> > Because it doesn't matter anyway and I would
> > have had to figure out another qualifier.
> > This way, and given that this executes once per
> > intel_pstate command line parameter, the code
> > executes the way it used to, overall.
> If someone specified intel_pstate=active, it will also compare with
> "passive" with this change.

Disagree.
As far as I can tell, and I tested, it works as expected.

... Doug

> > > > -
> > > > - if (!strcmp(str, "no_hwp")) {
> > > > + if (!strcmp(str, "no_hwp") && !hwp_active) {
> > > > pr_info("HWP disabled\n");
> > > > no_hwp = 1;
> > > > }
> > >
> > >
>
>

2021-09-10 11:20:07

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Fri, Sep 10, 2021 at 5:14 AM Doug Smythies <[email protected]> wrote:
>
> On Thu, Sep 9, 2021 at 10:22 AM Rafael J. Wysocki <[email protected]> wrote:
> > On Thu, Sep 9, 2021 at 6:12 PM Rafael J. Wysocki <[email protected]> wrote:
> > > On Thu, Sep 9, 2021 at 3:20 PM Doug Smythies <[email protected]> wrote:
> > > > On Thu, Sep 9, 2021 at 4:18 AM Rafael J. Wysocki <[email protected]> wrote:
> > > > > On Thu, Sep 9, 2021 at 8:52 AM Srinivas Pandruvada
> > > > > <[email protected]> wrote:
> > > > > >
> > > > > > On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > > > > > > If HWP has been already been enabled by BIOS, it may be
> > > > > > > necessary to override some kernel command line parameters.
> > > > > > > Once it has been enabled it requires a reset to be disabled.
> > > > > > >
> > > > > > > Signed-off-by: Doug Smythies <[email protected]>
> > > > > > > ---
> > > > > > > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > > > > > > 1 file changed, 16 insertions(+), 6 deletions(-)
> > > > > > >
> > > > > > > diff --git a/drivers/cpufreq/intel_pstate.c
> > > > > > > b/drivers/cpufreq/intel_pstate.c
> > > > > > > index bb4549959b11..073bae5d4498 100644
> > > > > > > --- a/drivers/cpufreq/intel_pstate.c
> > > > > > > +++ b/drivers/cpufreq/intel_pstate.c
> > > > > > > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > > > > > > */
> > > > > > > if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > > > > > > intel_pstate_hwp_is_enabled()) {
> > > > > > > - hwp_active++;
> > > > > > > + hwp_active = 1;
> > > > > > Why this change?
> > > > >
> > > > > I think hwp_active can be changed to bool and then it would make sense
> > > > > to update this line.
> > > > >
> > > > > > > hwp_mode_bdw = id->driver_data;
> > > > > > > intel_pstate.attr = hwp_cpufreq_attrs;
> > > > > > > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > > > > > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> > > > > > >
> > > > > > > static int __init intel_pstate_setup(char *str)
> > > > > > > {
> > > > > > > + /*
> > > > > > > + * If BIOS is forcing HWP, then parameter
> > > > > > > + * overrides might be needed. Only print
> > > > > > > + * the message once, and regardless of
> > > > > > > + * any overrides.
> > > > > > > + */
> > > > > > > + if(!hwp_active
> > > > > > This part of code is from early_param, Is it possible that
> > > > > > hwp_active is not 0?
> > > > >
> > > > > Well, it wouldn't matter even if it were nonzero. This check is just
> > > > > pointless anyway.
> > > > >
> > > > > > > && boot_cpu_has(X86_FEATURE_HWP))
> > > > > > > + if(intel_pstate_hwp_is_enabled()){
> > > > >
> > > > > This should be
> > > > >
> > > > > if (boot_cpu_has(X86_FEATURE_HWP) && intel_pstate_hwp_is_enabled()) {
> > > >
> > > > Disagree.
> > > > This routine gets executed once per intel_pstate related grub command
> > > > line entry. The purpose of the "if(!hwp_active" part is to prevent the
> > > > printing of the message to the logs multiple times.
> > >
> > > Ah OK. Fair enough.
> > >
> > > You can do all of the checks in one conditional, though. They will be
> > > processed left-to-right anyway.
> > >
> > > But then it would be good to avoid calling
> > > intel_pstate_hwp_is_enabled() multiple times if it returns false.
> > >
> > > And having said all that I'm not sure why you are trying to make
> > > no_hwp depend on !hwp_active? I will not be taken into account anyway
> > > if intel_pstate_hwp_is_enabled() returns 'true'?
> > >
> > > So if no_hwp is covered regardless, you may move the
> > > intel_pstate_hwp_is_enabled() inside the no_load conditional.
> > >
> > > Alternatively, and I would do that, intel_pstate_hwp_is_enabled()
> > > could be evaluated earlier in intel_pstate_init() and if it returned
> > > 'true', both no_load and no_hwp would be disregarded.
> >
> > Something like the attached, for the record.
>
> O.K. and Thanks.
> I was trying to avoid this line getting into the log:
>
> [ 0.000000] intel_pstate: HWP disabled
>
> only to overridden later by, now, these lines:
>
> [ 0.373742] intel_pstate: HWP enabled by BIOS
> [ 0.374177] intel_pstate: Intel P-state driver initializing
> [ 0.375097] intel_pstate: HWP enabled
>
> Let me see if I can go with your suggestion and get to
> what I had hoped to get in the logs.

It would be sufficient to put the "disabled" printk() after the
"no_hwp" if () statement in intel_pstate_init(). See attached.

BTW, I've changed the message to "HWP not enabled", because that's
what really happens to be precise.


Attachments:
intel_pstate-arguments.patch (1.79 kB)

2021-09-10 15:37:10

by Doug Smythies

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Fri, Sep 10, 2021 at 4:18 AM Rafael J. Wysocki <[email protected]> wrote:
> On Fri, Sep 10, 2021 at 5:14 AM Doug Smythies <[email protected]> wrote:
> > On Thu, Sep 9, 2021 at 10:22 AM Rafael J. Wysocki <[email protected]> wrote:
> > > On Thu, Sep 9, 2021 at 6:12 PM Rafael J. Wysocki <[email protected]> wrote:
> > > > On Thu, Sep 9, 2021 at 3:20 PM Doug Smythies <[email protected]> wrote:
> > > > > On Thu, Sep 9, 2021 at 4:18 AM Rafael J. Wysocki <[email protected]> wrote:
> > > > > > On Thu, Sep 9, 2021 at 8:52 AM Srinivas Pandruvada
> > > > > > <[email protected]> wrote:
> > > > > > >
> > > > > > > On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > > > > > > > If HWP has been already been enabled by BIOS, it may be
> > > > > > > > necessary to override some kernel command line parameters.
> > > > > > > > Once it has been enabled it requires a reset to be disabled.
> > > > > > > >
> > > > > > > > Signed-off-by: Doug Smythies <[email protected]>
> > > > > > > > ---
> > > > > > > > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > > > > > > > 1 file changed, 16 insertions(+), 6 deletions(-)
> > > > > > > >
> > > > > > > > diff --git a/drivers/cpufreq/intel_pstate.c
> > > > > > > > b/drivers/cpufreq/intel_pstate.c
> > > > > > > > index bb4549959b11..073bae5d4498 100644
> > > > > > > > --- a/drivers/cpufreq/intel_pstate.c
> > > > > > > > +++ b/drivers/cpufreq/intel_pstate.c
> > > > > > > > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > > > > > > > */
> > > > > > > > if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > > > > > > > intel_pstate_hwp_is_enabled()) {
> > > > > > > > - hwp_active++;
> > > > > > > > + hwp_active = 1;
> > > > > > > Why this change?
> > > > > >
> > > > > > I think hwp_active can be changed to bool and then it would make sense
> > > > > > to update this line.
> > > > > >
> > > > > > > > hwp_mode_bdw = id->driver_data;
> > > > > > > > intel_pstate.attr = hwp_cpufreq_attrs;
> > > > > > > > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > > > > > > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> > > > > > > >
> > > > > > > > static int __init intel_pstate_setup(char *str)
> > > > > > > > {
> > > > > > > > + /*
> > > > > > > > + * If BIOS is forcing HWP, then parameter
> > > > > > > > + * overrides might be needed. Only print
> > > > > > > > + * the message once, and regardless of
> > > > > > > > + * any overrides.
> > > > > > > > + */
> > > > > > > > + if(!hwp_active
> > > > > > > This part of code is from early_param, Is it possible that
> > > > > > > hwp_active is not 0?
> > > > > >
> > > > > > Well, it wouldn't matter even if it were nonzero. This check is just
> > > > > > pointless anyway.
> > > > > >
> > > > > > > > && boot_cpu_has(X86_FEATURE_HWP))
> > > > > > > > + if(intel_pstate_hwp_is_enabled()){
> > > > > >
> > > > > > This should be
> > > > > >
> > > > > > if (boot_cpu_has(X86_FEATURE_HWP) && intel_pstate_hwp_is_enabled()) {
> > > > >
> > > > > Disagree.
> > > > > This routine gets executed once per intel_pstate related grub command
> > > > > line entry. The purpose of the "if(!hwp_active" part is to prevent the
> > > > > printing of the message to the logs multiple times.
> > > >
> > > > Ah OK. Fair enough.
> > > >
> > > > You can do all of the checks in one conditional, though. They will be
> > > > processed left-to-right anyway.
> > > >
> > > > But then it would be good to avoid calling
> > > > intel_pstate_hwp_is_enabled() multiple times if it returns false.
> > > >
> > > > And having said all that I'm not sure why you are trying to make
> > > > no_hwp depend on !hwp_active? I will not be taken into account anyway
> > > > if intel_pstate_hwp_is_enabled() returns 'true'?
> > > >
> > > > So if no_hwp is covered regardless, you may move the
> > > > intel_pstate_hwp_is_enabled() inside the no_load conditional.
> > > >
> > > > Alternatively, and I would do that, intel_pstate_hwp_is_enabled()
> > > > could be evaluated earlier in intel_pstate_init() and if it returned
> > > > 'true', both no_load and no_hwp would be disregarded.
> > >
> > > Something like the attached, for the record.
> >
> > O.K. and Thanks.
> > I was trying to avoid this line getting into the log:
> >
> > [ 0.000000] intel_pstate: HWP disabled
> >
> > only to overridden later by, now, these lines:
> >
> > [ 0.373742] intel_pstate: HWP enabled by BIOS
> > [ 0.374177] intel_pstate: Intel P-state driver initializing
> > [ 0.375097] intel_pstate: HWP enabled
> >
> > Let me see if I can go with your suggestion and get to
> > what I had hoped to get in the logs.
>
> It would be sufficient to put the "disabled" printk() after the
> "no_hwp" if () statement in intel_pstate_init(). See attached.

Agreed, thanks. Yes, I was thinking similar.

> BTW, I've changed the message to "HWP not enabled", because that's
> what really happens to be precise.

Agreed. Good idea.

Give me a fews days to create and test a formal patch.
I currently have limited access to a computer that doesn't force
HWP via BIOS.

... Doug

2021-09-10 15:47:37

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

On Fri, Sep 10, 2021 at 5:35 PM Doug Smythies <[email protected]> wrote:
>
> On Fri, Sep 10, 2021 at 4:18 AM Rafael J. Wysocki <[email protected]> wrote:
> > On Fri, Sep 10, 2021 at 5:14 AM Doug Smythies <[email protected]> wrote:
> > > On Thu, Sep 9, 2021 at 10:22 AM Rafael J. Wysocki <[email protected]> wrote:
> > > > On Thu, Sep 9, 2021 at 6:12 PM Rafael J. Wysocki <[email protected]> wrote:
> > > > > On Thu, Sep 9, 2021 at 3:20 PM Doug Smythies <[email protected]> wrote:
> > > > > > On Thu, Sep 9, 2021 at 4:18 AM Rafael J. Wysocki <[email protected]> wrote:
> > > > > > > On Thu, Sep 9, 2021 at 8:52 AM Srinivas Pandruvada
> > > > > > > <[email protected]> wrote:
> > > > > > > >
> > > > > > > > On Wed, 2021-09-08 at 20:48 -0700, Doug Smythies wrote:
> > > > > > > > > If HWP has been already been enabled by BIOS, it may be
> > > > > > > > > necessary to override some kernel command line parameters.
> > > > > > > > > Once it has been enabled it requires a reset to be disabled.
> > > > > > > > >
> > > > > > > > > Signed-off-by: Doug Smythies <[email protected]>
> > > > > > > > > ---
> > > > > > > > > drivers/cpufreq/intel_pstate.c | 22 ++++++++++++++++------
> > > > > > > > > 1 file changed, 16 insertions(+), 6 deletions(-)
> > > > > > > > >
> > > > > > > > > diff --git a/drivers/cpufreq/intel_pstate.c
> > > > > > > > > b/drivers/cpufreq/intel_pstate.c
> > > > > > > > > index bb4549959b11..073bae5d4498 100644
> > > > > > > > > --- a/drivers/cpufreq/intel_pstate.c
> > > > > > > > > +++ b/drivers/cpufreq/intel_pstate.c
> > > > > > > > > @@ -3267,7 +3267,7 @@ static int __init intel_pstate_init(void)
> > > > > > > > > */
> > > > > > > > > if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) ||
> > > > > > > > > intel_pstate_hwp_is_enabled()) {
> > > > > > > > > - hwp_active++;
> > > > > > > > > + hwp_active = 1;
> > > > > > > > Why this change?
> > > > > > >
> > > > > > > I think hwp_active can be changed to bool and then it would make sense
> > > > > > > to update this line.
> > > > > > >
> > > > > > > > > hwp_mode_bdw = id->driver_data;
> > > > > > > > > intel_pstate.attr = hwp_cpufreq_attrs;
> > > > > > > > > intel_cpufreq.attr = hwp_cpufreq_attrs;
> > > > > > > > > @@ -3347,17 +3347,27 @@ device_initcall(intel_pstate_init);
> > > > > > > > >
> > > > > > > > > static int __init intel_pstate_setup(char *str)
> > > > > > > > > {
> > > > > > > > > + /*
> > > > > > > > > + * If BIOS is forcing HWP, then parameter
> > > > > > > > > + * overrides might be needed. Only print
> > > > > > > > > + * the message once, and regardless of
> > > > > > > > > + * any overrides.
> > > > > > > > > + */
> > > > > > > > > + if(!hwp_active
> > > > > > > > This part of code is from early_param, Is it possible that
> > > > > > > > hwp_active is not 0?
> > > > > > >
> > > > > > > Well, it wouldn't matter even if it were nonzero. This check is just
> > > > > > > pointless anyway.
> > > > > > >
> > > > > > > > > && boot_cpu_has(X86_FEATURE_HWP))
> > > > > > > > > + if(intel_pstate_hwp_is_enabled()){
> > > > > > >
> > > > > > > This should be
> > > > > > >
> > > > > > > if (boot_cpu_has(X86_FEATURE_HWP) && intel_pstate_hwp_is_enabled()) {
> > > > > >
> > > > > > Disagree.
> > > > > > This routine gets executed once per intel_pstate related grub command
> > > > > > line entry. The purpose of the "if(!hwp_active" part is to prevent the
> > > > > > printing of the message to the logs multiple times.
> > > > >
> > > > > Ah OK. Fair enough.
> > > > >
> > > > > You can do all of the checks in one conditional, though. They will be
> > > > > processed left-to-right anyway.
> > > > >
> > > > > But then it would be good to avoid calling
> > > > > intel_pstate_hwp_is_enabled() multiple times if it returns false.
> > > > >
> > > > > And having said all that I'm not sure why you are trying to make
> > > > > no_hwp depend on !hwp_active? I will not be taken into account anyway
> > > > > if intel_pstate_hwp_is_enabled() returns 'true'?
> > > > >
> > > > > So if no_hwp is covered regardless, you may move the
> > > > > intel_pstate_hwp_is_enabled() inside the no_load conditional.
> > > > >
> > > > > Alternatively, and I would do that, intel_pstate_hwp_is_enabled()
> > > > > could be evaluated earlier in intel_pstate_init() and if it returned
> > > > > 'true', both no_load and no_hwp would be disregarded.
> > > >
> > > > Something like the attached, for the record.
> > >
> > > O.K. and Thanks.
> > > I was trying to avoid this line getting into the log:
> > >
> > > [ 0.000000] intel_pstate: HWP disabled
> > >
> > > only to overridden later by, now, these lines:
> > >
> > > [ 0.373742] intel_pstate: HWP enabled by BIOS
> > > [ 0.374177] intel_pstate: Intel P-state driver initializing
> > > [ 0.375097] intel_pstate: HWP enabled
> > >
> > > Let me see if I can go with your suggestion and get to
> > > what I had hoped to get in the logs.
> >
> > It would be sufficient to put the "disabled" printk() after the
> > "no_hwp" if () statement in intel_pstate_init(). See attached.
>
> Agreed, thanks. Yes, I was thinking similar.
>
> > BTW, I've changed the message to "HWP not enabled", because that's
> > what really happens to be precise.
>
> Agreed. Good idea.
>
> Give me a fews days to create and test a formal patch.

OK

> I currently have limited access to a computer that doesn't force
> HWP via BIOS.