* [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver
2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
@ 2023-06-16 12:06 ` Wyes Karny
2023-06-19 1:58 ` Mario Limonciello
2023-06-16 12:06 ` [PATCH v2 2/5] cpupower: Add is_valid_path API Wyes Karny
` (3 subsequent siblings)
4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:06 UTC (permalink / raw)
To: trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny
amd-pstate active mode driver name is "amd-pstate-epp". Add this to the
string matching condition to recognise amd-pstate active mode driver.
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
tools/power/cpupower/utils/helpers/misc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
index 9547b29254a7..21f653cd472c 100644
--- a/tools/power/cpupower/utils/helpers/misc.c
+++ b/tools/power/cpupower/utils/helpers/misc.c
@@ -95,7 +95,7 @@ bool cpupower_amd_pstate_enabled(void)
if (!driver)
return ret;
- if (!strcmp(driver, "amd-pstate"))
+ if (!strcmp(driver, "amd-pstate") || !strcmp(driver, "amd-pstate-epp"))
ret = true;
cpufreq_put_driver(driver);
--
2.34.1
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver
2023-06-16 12:06 ` [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
@ 2023-06-19 1:58 ` Mario Limonciello
2023-06-19 17:31 ` Wyes Karny
0 siblings, 1 reply; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19 1:58 UTC (permalink / raw)
To: Wyes Karny, trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan
On 6/16/23 07:06, Wyes Karny wrote:
> amd-pstate active mode driver name is "amd-pstate-epp". Add this to the
> string matching condition to recognise amd-pstate active mode driver.
>
> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
> ---
> tools/power/cpupower/utils/helpers/misc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> index 9547b29254a7..21f653cd472c 100644
> --- a/tools/power/cpupower/utils/helpers/misc.c
> +++ b/tools/power/cpupower/utils/helpers/misc.c
> @@ -95,7 +95,7 @@ bool cpupower_amd_pstate_enabled(void)
> if (!driver)
> return ret;
>
> - if (!strcmp(driver, "amd-pstate"))
> + if (!strcmp(driver, "amd-pstate") || !strcmp(driver, "amd-pstate-epp"))
To avoid getting caught in the case that a kernel didn't have the patch
separated from this series (for example if a distro missed it in a
backport from separate directories), how about using strncmp() instead
and just look for the prefix?
This would also let the tool be more future proofed in the case another
amd-pstate driver was introduced later down the road as long as it stuck
to "amd-pstate*"
> ret = true;
>
> cpufreq_put_driver(driver);
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver
2023-06-19 1:58 ` Mario Limonciello
@ 2023-06-19 17:31 ` Wyes Karny
2023-06-19 17:37 ` Limonciello, Mario
0 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-19 17:31 UTC (permalink / raw)
To: Mario Limonciello
Cc: trenn, shuah, linux-pm, linux-kernel, rafael, gautham.shenoy,
Ray.Huang, Perry.Yuan
Hi Mario,
On 18 Jun 20:58, Mario Limonciello wrote:
> On 6/16/23 07:06, Wyes Karny wrote:
> > amd-pstate active mode driver name is "amd-pstate-epp". Add this to the
> > string matching condition to recognise amd-pstate active mode driver.
> >
> > Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> > Signed-off-by: Wyes Karny <wyes.karny@amd.com>
> > ---
> > tools/power/cpupower/utils/helpers/misc.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> > index 9547b29254a7..21f653cd472c 100644
> > --- a/tools/power/cpupower/utils/helpers/misc.c
> > +++ b/tools/power/cpupower/utils/helpers/misc.c
> > @@ -95,7 +95,7 @@ bool cpupower_amd_pstate_enabled(void)
> > if (!driver)
> > return ret;
> > - if (!strcmp(driver, "amd-pstate"))
> > + if (!strcmp(driver, "amd-pstate") || !strcmp(driver, "amd-pstate-epp"))
>
> To avoid getting caught in the case that a kernel didn't have the patch
> separated from this series (for example if a distro missed it in a backport
> from separate directories), how about using strncmp() instead and just look
> for the prefix?
Sure, I'll update the patch.
I'm thinking of using strncmp(driver, "amd", 3), because in the above
case the epp driver would be "amd_pstate_epp" therefore common prefix is
only "amd".
Thanks,
Wyes
>
> This would also let the tool be more future proofed in the case another
> amd-pstate driver was introduced later down the road as long as it stuck to
> "amd-pstate*"
>
> > ret = true;
> > cpufreq_put_driver(driver);
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver
2023-06-19 17:31 ` Wyes Karny
@ 2023-06-19 17:37 ` Limonciello, Mario
0 siblings, 0 replies; 13+ messages in thread
From: Limonciello, Mario @ 2023-06-19 17:37 UTC (permalink / raw)
To: Wyes Karny
Cc: trenn, shuah, linux-pm, linux-kernel, rafael, gautham.shenoy,
Ray.Huang, Perry.Yuan
On 6/19/2023 12:31 PM, Wyes Karny wrote:
> Hi Mario,
>
> On 18 Jun 20:58, Mario Limonciello wrote:
>> On 6/16/23 07:06, Wyes Karny wrote:
>>> amd-pstate active mode driver name is "amd-pstate-epp". Add this to the
>>> string matching condition to recognise amd-pstate active mode driver.
>>>
>>> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
>>> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
>>> ---
>>> tools/power/cpupower/utils/helpers/misc.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
>>> index 9547b29254a7..21f653cd472c 100644
>>> --- a/tools/power/cpupower/utils/helpers/misc.c
>>> +++ b/tools/power/cpupower/utils/helpers/misc.c
>>> @@ -95,7 +95,7 @@ bool cpupower_amd_pstate_enabled(void)
>>> if (!driver)
>>> return ret;
>>> - if (!strcmp(driver, "amd-pstate"))
>>> + if (!strcmp(driver, "amd-pstate") || !strcmp(driver, "amd-pstate-epp"))
>> To avoid getting caught in the case that a kernel didn't have the patch
>> separated from this series (for example if a distro missed it in a backport
>> from separate directories), how about using strncmp() instead and just look
>> for the prefix?
> Sure, I'll update the patch.
> I'm thinking of using strncmp(driver, "amd", 3), because in the above
> case the epp driver would be "amd_pstate_epp" therefore common prefix is
> only "amd".
>
> Thanks,
> Wyes
Sounds good, thanks!
>> This would also let the tool be more future proofed in the case another
>> amd-pstate driver was introduced later down the road as long as it stuck to
>> "amd-pstate*"
>>
>>> ret = true;
>>> cpufreq_put_driver(driver);
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 2/5] cpupower: Add is_valid_path API
2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
2023-06-16 12:06 ` [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
@ 2023-06-16 12:06 ` Wyes Karny
2023-06-19 1:58 ` Mario Limonciello
2023-06-16 12:09 ` [PATCH v2 3/5] cpupower: Add EPP value change support Wyes Karny
` (2 subsequent siblings)
4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:06 UTC (permalink / raw)
To: trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny
Add is_valid_path API to check whether the sysfs file is present or not.
Suggested-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
tools/power/cpupower/lib/cpupower.c | 7 +++++++
tools/power/cpupower/lib/cpupower_intern.h | 1 +
2 files changed, 8 insertions(+)
diff --git a/tools/power/cpupower/lib/cpupower.c b/tools/power/cpupower/lib/cpupower.c
index 3f7d0c0c5067..7a2ef691b20e 100644
--- a/tools/power/cpupower/lib/cpupower.c
+++ b/tools/power/cpupower/lib/cpupower.c
@@ -14,6 +14,13 @@
#include "cpupower.h"
#include "cpupower_intern.h"
+int is_valid_path(const char *path)
+{
+ if (access(path, F_OK) == -1)
+ return 0;
+ return 1;
+}
+
unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen)
{
ssize_t numread;
diff --git a/tools/power/cpupower/lib/cpupower_intern.h b/tools/power/cpupower/lib/cpupower_intern.h
index ac1112b956ec..5fdb8620d41b 100644
--- a/tools/power/cpupower/lib/cpupower_intern.h
+++ b/tools/power/cpupower/lib/cpupower_intern.h
@@ -7,5 +7,6 @@
#define SYSFS_PATH_MAX 255
+int is_valid_path(const char *path);
unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen);
unsigned int cpupower_write_sysfs(const char *path, char *buf, size_t buflen);
--
2.34.1
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v2 2/5] cpupower: Add is_valid_path API
2023-06-16 12:06 ` [PATCH v2 2/5] cpupower: Add is_valid_path API Wyes Karny
@ 2023-06-19 1:58 ` Mario Limonciello
0 siblings, 0 replies; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19 1:58 UTC (permalink / raw)
To: Wyes Karny, trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan
On 6/16/23 07:06, Wyes Karny wrote:
> Add is_valid_path API to check whether the sysfs file is present or not.
>
> Suggested-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
> tools/power/cpupower/lib/cpupower.c | 7 +++++++
> tools/power/cpupower/lib/cpupower_intern.h | 1 +
> 2 files changed, 8 insertions(+)
>
> diff --git a/tools/power/cpupower/lib/cpupower.c b/tools/power/cpupower/lib/cpupower.c
> index 3f7d0c0c5067..7a2ef691b20e 100644
> --- a/tools/power/cpupower/lib/cpupower.c
> +++ b/tools/power/cpupower/lib/cpupower.c
> @@ -14,6 +14,13 @@
> #include "cpupower.h"
> #include "cpupower_intern.h"
>
> +int is_valid_path(const char *path)
> +{
> + if (access(path, F_OK) == -1)
> + return 0;
> + return 1;
> +}
> +
> unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen)
> {
> ssize_t numread;
> diff --git a/tools/power/cpupower/lib/cpupower_intern.h b/tools/power/cpupower/lib/cpupower_intern.h
> index ac1112b956ec..5fdb8620d41b 100644
> --- a/tools/power/cpupower/lib/cpupower_intern.h
> +++ b/tools/power/cpupower/lib/cpupower_intern.h
> @@ -7,5 +7,6 @@
>
> #define SYSFS_PATH_MAX 255
>
> +int is_valid_path(const char *path);
> unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen);
> unsigned int cpupower_write_sysfs(const char *path, char *buf, size_t buflen);
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 3/5] cpupower: Add EPP value change support
2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
2023-06-16 12:06 ` [PATCH v2 1/5] cpupower: Recognise amd-pstate active mode driver Wyes Karny
2023-06-16 12:06 ` [PATCH v2 2/5] cpupower: Add is_valid_path API Wyes Karny
@ 2023-06-16 12:09 ` Wyes Karny
2023-06-19 1:58 ` Mario Limonciello
2023-06-16 12:10 ` [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change Wyes Karny
2023-06-16 12:11 ` [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:09 UTC (permalink / raw)
To: trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny
amd_pstate and intel_pstate active mode drivers support energy
performance preference feature. Through this user can convey it's
energy/performance preference to platform. Add this value change
capability to cpupower.
To change the EPP value use below command:
cpupower set --epp performance
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
tools/power/cpupower/utils/cpupower-set.c | 23 +++++++++++++++++++-
tools/power/cpupower/utils/helpers/helpers.h | 5 +++++
tools/power/cpupower/utils/helpers/misc.c | 19 ++++++++++++++++
3 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
index 180d5ba877e6..a789b123dbd4 100644
--- a/tools/power/cpupower/utils/cpupower-set.c
+++ b/tools/power/cpupower/utils/cpupower-set.c
@@ -18,6 +18,7 @@
static struct option set_opts[] = {
{"perf-bias", required_argument, NULL, 'b'},
+ {"epp", required_argument, NULL, 'e'},
{ },
};
@@ -37,11 +38,13 @@ int cmd_set(int argc, char **argv)
union {
struct {
int perf_bias:1;
+ int epp:1;
};
int params;
} params;
int perf_bias = 0;
int ret = 0;
+ char epp[30];
ret = uname(&uts);
if (!ret && (!strcmp(uts.machine, "ppc64le") ||
@@ -55,7 +58,7 @@ int cmd_set(int argc, char **argv)
params.params = 0;
/* parameter parsing */
- while ((ret = getopt_long(argc, argv, "b:",
+ while ((ret = getopt_long(argc, argv, "b:e:",
set_opts, NULL)) != -1) {
switch (ret) {
case 'b':
@@ -69,6 +72,15 @@ int cmd_set(int argc, char **argv)
}
params.perf_bias = 1;
break;
+ case 'e':
+ if (params.epp)
+ print_wrong_arg_exit();
+ if (sscanf(optarg, "%29s", epp) != 1) {
+ print_wrong_arg_exit();
+ return -EINVAL;
+ }
+ params.epp = 1;
+ break;
default:
print_wrong_arg_exit();
}
@@ -102,6 +114,15 @@ int cmd_set(int argc, char **argv)
break;
}
}
+
+ if (params.epp) {
+ ret = cpupower_set_epp(cpu, epp);
+ if (ret) {
+ fprintf(stderr,
+ "Error setting epp value on CPU %d\n", cpu);
+ break;
+ }
+ }
}
return ret;
}
diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
index 96e4bede078b..5d998de2d291 100644
--- a/tools/power/cpupower/utils/helpers/helpers.h
+++ b/tools/power/cpupower/utils/helpers/helpers.h
@@ -116,6 +116,8 @@ extern int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val);
extern int cpupower_intel_get_perf_bias(unsigned int cpu);
extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
+extern int cpupower_set_epp(unsigned int cpu, char *epp);
+
/* Read/Write msr ****************************/
/* PCI stuff ****************************/
@@ -173,6 +175,9 @@ static inline int cpupower_intel_get_perf_bias(unsigned int cpu)
static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
{ return 0; };
+static inline int cpupower_set_epp(unsigned int cpu, char *epp)
+{ return -1; };
+
/* Read/Write msr ****************************/
static inline int cpufreq_has_boost_support(unsigned int cpu, int *support,
diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
index 21f653cd472c..63c3f26ef874 100644
--- a/tools/power/cpupower/utils/helpers/misc.c
+++ b/tools/power/cpupower/utils/helpers/misc.c
@@ -87,6 +87,25 @@ int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val)
return 0;
}
+int cpupower_set_epp(unsigned int cpu, char *epp)
+{
+ char path[SYSFS_PATH_MAX];
+ char linebuf[30] = {};
+
+ snprintf(path, sizeof(path),
+ PATH_TO_CPU "cpu%u/cpufreq/energy_performance_preference", cpu);
+
+ if (!is_valid_path(path))
+ return -1;
+
+ snprintf(linebuf, sizeof(linebuf), "%s", epp);
+
+ if (cpupower_write_sysfs(path, linebuf, 30) <= 0)
+ return -1;
+
+ return 0;
+}
+
bool cpupower_amd_pstate_enabled(void)
{
char *driver = cpufreq_get_driver(0);
--
2.34.1
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v2 3/5] cpupower: Add EPP value change support
2023-06-16 12:09 ` [PATCH v2 3/5] cpupower: Add EPP value change support Wyes Karny
@ 2023-06-19 1:58 ` Mario Limonciello
0 siblings, 0 replies; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19 1:58 UTC (permalink / raw)
To: Wyes Karny, trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan
On 6/16/23 07:09, Wyes Karny wrote:
> amd_pstate and intel_pstate active mode drivers support energy
> performance preference feature. Through this user can convey it's
> energy/performance preference to platform. Add this value change
> capability to cpupower.
>
> To change the EPP value use below command:
> cpupower set --epp performance
>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
> tools/power/cpupower/utils/cpupower-set.c | 23 +++++++++++++++++++-
> tools/power/cpupower/utils/helpers/helpers.h | 5 +++++
> tools/power/cpupower/utils/helpers/misc.c | 19 ++++++++++++++++
> 3 files changed, 46 insertions(+), 1 deletion(-)
>
> diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
> index 180d5ba877e6..a789b123dbd4 100644
> --- a/tools/power/cpupower/utils/cpupower-set.c
> +++ b/tools/power/cpupower/utils/cpupower-set.c
> @@ -18,6 +18,7 @@
>
> static struct option set_opts[] = {
> {"perf-bias", required_argument, NULL, 'b'},
> + {"epp", required_argument, NULL, 'e'},
> { },
> };
>
> @@ -37,11 +38,13 @@ int cmd_set(int argc, char **argv)
> union {
> struct {
> int perf_bias:1;
> + int epp:1;
> };
> int params;
> } params;
> int perf_bias = 0;
> int ret = 0;
> + char epp[30];
>
> ret = uname(&uts);
> if (!ret && (!strcmp(uts.machine, "ppc64le") ||
> @@ -55,7 +58,7 @@ int cmd_set(int argc, char **argv)
>
> params.params = 0;
> /* parameter parsing */
> - while ((ret = getopt_long(argc, argv, "b:",
> + while ((ret = getopt_long(argc, argv, "b:e:",
> set_opts, NULL)) != -1) {
> switch (ret) {
> case 'b':
> @@ -69,6 +72,15 @@ int cmd_set(int argc, char **argv)
> }
> params.perf_bias = 1;
> break;
> + case 'e':
> + if (params.epp)
> + print_wrong_arg_exit();
> + if (sscanf(optarg, "%29s", epp) != 1) {
> + print_wrong_arg_exit();
> + return -EINVAL;
> + }
> + params.epp = 1;
> + break;
> default:
> print_wrong_arg_exit();
> }
> @@ -102,6 +114,15 @@ int cmd_set(int argc, char **argv)
> break;
> }
> }
> +
> + if (params.epp) {
> + ret = cpupower_set_epp(cpu, epp);
> + if (ret) {
> + fprintf(stderr,
> + "Error setting epp value on CPU %d\n", cpu);
> + break;
> + }
> + }
> }
> return ret;
> }
> diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
> index 96e4bede078b..5d998de2d291 100644
> --- a/tools/power/cpupower/utils/helpers/helpers.h
> +++ b/tools/power/cpupower/utils/helpers/helpers.h
> @@ -116,6 +116,8 @@ extern int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val);
> extern int cpupower_intel_get_perf_bias(unsigned int cpu);
> extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
>
> +extern int cpupower_set_epp(unsigned int cpu, char *epp);
> +
> /* Read/Write msr ****************************/
>
> /* PCI stuff ****************************/
> @@ -173,6 +175,9 @@ static inline int cpupower_intel_get_perf_bias(unsigned int cpu)
> static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
> { return 0; };
>
> +static inline int cpupower_set_epp(unsigned int cpu, char *epp)
> +{ return -1; };
> +
> /* Read/Write msr ****************************/
>
> static inline int cpufreq_has_boost_support(unsigned int cpu, int *support,
> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> index 21f653cd472c..63c3f26ef874 100644
> --- a/tools/power/cpupower/utils/helpers/misc.c
> +++ b/tools/power/cpupower/utils/helpers/misc.c
> @@ -87,6 +87,25 @@ int cpupower_intel_set_perf_bias(unsigned int cpu, unsigned int val)
> return 0;
> }
>
> +int cpupower_set_epp(unsigned int cpu, char *epp)
> +{
> + char path[SYSFS_PATH_MAX];
> + char linebuf[30] = {};
> +
> + snprintf(path, sizeof(path),
> + PATH_TO_CPU "cpu%u/cpufreq/energy_performance_preference", cpu);
> +
> + if (!is_valid_path(path))
> + return -1;
> +
> + snprintf(linebuf, sizeof(linebuf), "%s", epp);
> +
> + if (cpupower_write_sysfs(path, linebuf, 30) <= 0)
> + return -1;
> +
> + return 0;
> +}
> +
> bool cpupower_amd_pstate_enabled(void)
> {
> char *driver = cpufreq_get_driver(0);
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change
2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
` (2 preceding siblings ...)
2023-06-16 12:09 ` [PATCH v2 3/5] cpupower: Add EPP value change support Wyes Karny
@ 2023-06-16 12:10 ` Wyes Karny
2023-06-19 1:59 ` Mario Limonciello
2023-06-16 12:11 ` [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:10 UTC (permalink / raw)
To: trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny, Huang Rui
amd_pstate supports changing of its mode dynamically via `status` sysfs
file. Add the same capability in cpupower. To change the mode to active
mode use below command:
cpupower set --amd-pstate-mode active
Acked-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
tools/power/cpupower/utils/cpupower-set.c | 24 ++++++++++++++++++--
tools/power/cpupower/utils/helpers/helpers.h | 3 +++
tools/power/cpupower/utils/helpers/misc.c | 18 +++++++++++++++
3 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
index a789b123dbd4..c2ba69b7ea54 100644
--- a/tools/power/cpupower/utils/cpupower-set.c
+++ b/tools/power/cpupower/utils/cpupower-set.c
@@ -19,6 +19,7 @@
static struct option set_opts[] = {
{"perf-bias", required_argument, NULL, 'b'},
{"epp", required_argument, NULL, 'e'},
+ {"amd-pstate-mode", required_argument, NULL, 'm'},
{ },
};
@@ -39,12 +40,13 @@ int cmd_set(int argc, char **argv)
struct {
int perf_bias:1;
int epp:1;
+ int mode:1;
};
int params;
} params;
int perf_bias = 0;
int ret = 0;
- char epp[30];
+ char epp[30], mode[20];
ret = uname(&uts);
if (!ret && (!strcmp(uts.machine, "ppc64le") ||
@@ -58,7 +60,7 @@ int cmd_set(int argc, char **argv)
params.params = 0;
/* parameter parsing */
- while ((ret = getopt_long(argc, argv, "b:e:",
+ while ((ret = getopt_long(argc, argv, "b:e:m:",
set_opts, NULL)) != -1) {
switch (ret) {
case 'b':
@@ -81,6 +83,17 @@ int cmd_set(int argc, char **argv)
}
params.epp = 1;
break;
+ case 'm':
+ if (cpupower_cpu_info.vendor != X86_VENDOR_AMD)
+ print_wrong_arg_exit();
+ if (params.mode)
+ print_wrong_arg_exit();
+ if (sscanf(optarg, "%19s", mode) != 1) {
+ print_wrong_arg_exit();
+ return -EINVAL;
+ }
+ params.mode = 1;
+ break;
default:
print_wrong_arg_exit();
}
@@ -89,6 +102,12 @@ int cmd_set(int argc, char **argv)
if (!params.params)
print_wrong_arg_exit();
+ if (params.mode) {
+ ret = cpupower_set_amd_pstate_mode(mode);
+ if (ret)
+ fprintf(stderr, "Error setting mode\n");
+ }
+
/* Default is: set all CPUs */
if (bitmask_isallclear(cpus_chosen))
bitmask_setall(cpus_chosen);
@@ -123,6 +142,7 @@ int cmd_set(int argc, char **argv)
break;
}
}
+
}
return ret;
}
diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
index 5d998de2d291..d35596631eef 100644
--- a/tools/power/cpupower/utils/helpers/helpers.h
+++ b/tools/power/cpupower/utils/helpers/helpers.h
@@ -117,6 +117,7 @@ extern int cpupower_intel_get_perf_bias(unsigned int cpu);
extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
extern int cpupower_set_epp(unsigned int cpu, char *epp);
+extern int cpupower_set_amd_pstate_mode(char *mode);
/* Read/Write msr ****************************/
@@ -177,6 +178,8 @@ static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
static inline int cpupower_set_epp(unsigned int cpu, char *epp)
{ return -1; };
+static inline int cpupower_set_amd_pstate_mode(char *mode)
+{ return -1; };
/* Read/Write msr ****************************/
diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
index 63c3f26ef874..9df9af8a969e 100644
--- a/tools/power/cpupower/utils/helpers/misc.c
+++ b/tools/power/cpupower/utils/helpers/misc.c
@@ -106,6 +106,24 @@ int cpupower_set_epp(unsigned int cpu, char *epp)
return 0;
}
+int cpupower_set_amd_pstate_mode(char *mode)
+{
+ char path[SYSFS_PATH_MAX];
+ char linebuf[20] = {};
+
+ snprintf(path, sizeof(path), PATH_TO_CPU "amd_pstate/status");
+
+ if (!is_valid_path(path))
+ return -1;
+
+ snprintf(linebuf, sizeof(linebuf), "%s\n", mode);
+
+ if (cpupower_write_sysfs(path, linebuf, 20) <= 0)
+ return -1;
+
+ return 0;
+}
+
bool cpupower_amd_pstate_enabled(void)
{
char *driver = cpufreq_get_driver(0);
--
2.34.1
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change
2023-06-16 12:10 ` [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change Wyes Karny
@ 2023-06-19 1:59 ` Mario Limonciello
0 siblings, 0 replies; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19 1:59 UTC (permalink / raw)
To: Wyes Karny, trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan
On 6/16/23 07:10, Wyes Karny wrote:
> amd_pstate supports changing of its mode dynamically via `status` sysfs
> file. Add the same capability in cpupower. To change the mode to active
> mode use below command:
>
> cpupower set --amd-pstate-mode active
>
> Acked-by: Huang Rui <ray.huang@amd.com>
> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
> tools/power/cpupower/utils/cpupower-set.c | 24 ++++++++++++++++++--
> tools/power/cpupower/utils/helpers/helpers.h | 3 +++
> tools/power/cpupower/utils/helpers/misc.c | 18 +++++++++++++++
> 3 files changed, 43 insertions(+), 2 deletions(-)
>
> diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
> index a789b123dbd4..c2ba69b7ea54 100644
> --- a/tools/power/cpupower/utils/cpupower-set.c
> +++ b/tools/power/cpupower/utils/cpupower-set.c
> @@ -19,6 +19,7 @@
> static struct option set_opts[] = {
> {"perf-bias", required_argument, NULL, 'b'},
> {"epp", required_argument, NULL, 'e'},
> + {"amd-pstate-mode", required_argument, NULL, 'm'},
> { },
> };
>
> @@ -39,12 +40,13 @@ int cmd_set(int argc, char **argv)
> struct {
> int perf_bias:1;
> int epp:1;
> + int mode:1;
> };
> int params;
> } params;
> int perf_bias = 0;
> int ret = 0;
> - char epp[30];
> + char epp[30], mode[20];
>
> ret = uname(&uts);
> if (!ret && (!strcmp(uts.machine, "ppc64le") ||
> @@ -58,7 +60,7 @@ int cmd_set(int argc, char **argv)
>
> params.params = 0;
> /* parameter parsing */
> - while ((ret = getopt_long(argc, argv, "b:e:",
> + while ((ret = getopt_long(argc, argv, "b:e:m:",
> set_opts, NULL)) != -1) {
> switch (ret) {
> case 'b':
> @@ -81,6 +83,17 @@ int cmd_set(int argc, char **argv)
> }
> params.epp = 1;
> break;
> + case 'm':
> + if (cpupower_cpu_info.vendor != X86_VENDOR_AMD)
> + print_wrong_arg_exit();
> + if (params.mode)
> + print_wrong_arg_exit();
> + if (sscanf(optarg, "%19s", mode) != 1) {
> + print_wrong_arg_exit();
> + return -EINVAL;
> + }
> + params.mode = 1;
> + break;
> default:
> print_wrong_arg_exit();
> }
> @@ -89,6 +102,12 @@ int cmd_set(int argc, char **argv)
> if (!params.params)
> print_wrong_arg_exit();
>
> + if (params.mode) {
> + ret = cpupower_set_amd_pstate_mode(mode);
> + if (ret)
> + fprintf(stderr, "Error setting mode\n");
> + }
> +
> /* Default is: set all CPUs */
> if (bitmask_isallclear(cpus_chosen))
> bitmask_setall(cpus_chosen);
> @@ -123,6 +142,7 @@ int cmd_set(int argc, char **argv)
> break;
> }
> }
> +
> }
> return ret;
> }
> diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
> index 5d998de2d291..d35596631eef 100644
> --- a/tools/power/cpupower/utils/helpers/helpers.h
> +++ b/tools/power/cpupower/utils/helpers/helpers.h
> @@ -117,6 +117,7 @@ extern int cpupower_intel_get_perf_bias(unsigned int cpu);
> extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
>
> extern int cpupower_set_epp(unsigned int cpu, char *epp);
> +extern int cpupower_set_amd_pstate_mode(char *mode);
>
> /* Read/Write msr ****************************/
>
> @@ -177,6 +178,8 @@ static inline unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu)
>
> static inline int cpupower_set_epp(unsigned int cpu, char *epp)
> { return -1; };
> +static inline int cpupower_set_amd_pstate_mode(char *mode)
> +{ return -1; };
>
> /* Read/Write msr ****************************/
>
> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> index 63c3f26ef874..9df9af8a969e 100644
> --- a/tools/power/cpupower/utils/helpers/misc.c
> +++ b/tools/power/cpupower/utils/helpers/misc.c
> @@ -106,6 +106,24 @@ int cpupower_set_epp(unsigned int cpu, char *epp)
> return 0;
> }
>
> +int cpupower_set_amd_pstate_mode(char *mode)
> +{
> + char path[SYSFS_PATH_MAX];
> + char linebuf[20] = {};
> +
> + snprintf(path, sizeof(path), PATH_TO_CPU "amd_pstate/status");
> +
> + if (!is_valid_path(path))
> + return -1;
> +
> + snprintf(linebuf, sizeof(linebuf), "%s\n", mode);
> +
> + if (cpupower_write_sysfs(path, linebuf, 20) <= 0)
> + return -1;
> +
> + return 0;
> +}
> +
> bool cpupower_amd_pstate_enabled(void)
> {
> char *driver = cpufreq_get_driver(0);
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower
2023-06-16 12:06 [PATCH v2 0/5] cpupower: Add various feature control support for amd_pstate Wyes Karny
` (3 preceding siblings ...)
2023-06-16 12:10 ` [PATCH v2 4/5] cpupower: Add support for amd_pstate mode change Wyes Karny
@ 2023-06-16 12:11 ` Wyes Karny
2023-06-19 1:59 ` Mario Limonciello
4 siblings, 1 reply; 13+ messages in thread
From: Wyes Karny @ 2023-06-16 12:11 UTC (permalink / raw)
To: trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy,
Mario.Limonciello, Ray.Huang, Perry.Yuan, Wyes Karny, Huang Rui
If boost sysfs (/sys/devices/system/cpu/cpufreq/boost) file is present
turbo-boost is feature is supported in the hardware. By default this
feature should be enabled. But to disable/enable it write to the sysfs
file. Use the same to control this feature via cpupower.
To enable:
cpupower set --turbo-boost 1
To disable:
cpupower set --turbo-boost 0
Acked-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
---
tools/power/cpupower/utils/cpupower-set.c | 22 +++++++++++++++++++-
tools/power/cpupower/utils/helpers/helpers.h | 3 +++
tools/power/cpupower/utils/helpers/misc.c | 18 ++++++++++++++++
3 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
index c2ba69b7ea54..0677b58374ab 100644
--- a/tools/power/cpupower/utils/cpupower-set.c
+++ b/tools/power/cpupower/utils/cpupower-set.c
@@ -20,6 +20,7 @@ static struct option set_opts[] = {
{"perf-bias", required_argument, NULL, 'b'},
{"epp", required_argument, NULL, 'e'},
{"amd-pstate-mode", required_argument, NULL, 'm'},
+ {"turbo-boost", required_argument, NULL, 't'},
{ },
};
@@ -41,10 +42,11 @@ int cmd_set(int argc, char **argv)
int perf_bias:1;
int epp:1;
int mode:1;
+ int turbo_boost:1;
};
int params;
} params;
- int perf_bias = 0;
+ int perf_bias = 0, turbo_boost = 1;
int ret = 0;
char epp[30], mode[20];
@@ -94,6 +96,18 @@ int cmd_set(int argc, char **argv)
}
params.mode = 1;
break;
+ case 't':
+ if (params.turbo_boost)
+ print_wrong_arg_exit();
+ turbo_boost = atoi(optarg);
+ if (turbo_boost < 0 || turbo_boost > 1) {
+ printf("--turbo-boost param out of range [0-1]\n");
+ print_wrong_arg_exit();
+ }
+ params.turbo_boost = 1;
+ break;
+
+
default:
print_wrong_arg_exit();
}
@@ -108,6 +122,12 @@ int cmd_set(int argc, char **argv)
fprintf(stderr, "Error setting mode\n");
}
+ if (params.turbo_boost) {
+ ret = cpupower_set_turbo_boost(turbo_boost);
+ if (ret)
+ fprintf(stderr, "Error setting turbo-boost\n");
+ }
+
/* Default is: set all CPUs */
if (bitmask_isallclear(cpus_chosen))
bitmask_setall(cpus_chosen);
diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
index d35596631eef..95749b8ee475 100644
--- a/tools/power/cpupower/utils/helpers/helpers.h
+++ b/tools/power/cpupower/utils/helpers/helpers.h
@@ -118,6 +118,7 @@ extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
extern int cpupower_set_epp(unsigned int cpu, char *epp);
extern int cpupower_set_amd_pstate_mode(char *mode);
+extern int cpupower_set_turbo_boost(int turbo_boost);
/* Read/Write msr ****************************/
@@ -180,6 +181,8 @@ static inline int cpupower_set_epp(unsigned int cpu, char *epp)
{ return -1; };
static inline int cpupower_set_amd_pstate_mode(char *mode)
{ return -1; };
+static inline int cpupower_set_turbo_boost(int turbo_boost)
+{ return -1; };
/* Read/Write msr ****************************/
diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
index 9df9af8a969e..fc822a0e6b7b 100644
--- a/tools/power/cpupower/utils/helpers/misc.c
+++ b/tools/power/cpupower/utils/helpers/misc.c
@@ -124,6 +124,24 @@ int cpupower_set_amd_pstate_mode(char *mode)
return 0;
}
+int cpupower_set_turbo_boost(int turbo_boost)
+{
+ char path[SYSFS_PATH_MAX];
+ char linebuf[2] = {};
+
+ snprintf(path, sizeof(path), PATH_TO_CPU "cpufreq/boost");
+
+ if (!is_valid_path(path))
+ return -1;
+
+ snprintf(linebuf, sizeof(linebuf), "%d", turbo_boost);
+
+ if (cpupower_write_sysfs(path, linebuf, 2) <= 0)
+ return -1;
+
+ return 0;
+}
+
bool cpupower_amd_pstate_enabled(void)
{
char *driver = cpufreq_get_driver(0);
--
2.34.1
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower
2023-06-16 12:11 ` [PATCH v2 5/5] cpupower: Add turbo-boost support in cpupower Wyes Karny
@ 2023-06-19 1:59 ` Mario Limonciello
0 siblings, 0 replies; 13+ messages in thread
From: Mario Limonciello @ 2023-06-19 1:59 UTC (permalink / raw)
To: Wyes Karny, trenn, shuah
Cc: linux-pm, linux-kernel, rafael, gautham.shenoy, Ray.Huang, Perry.Yuan
On 6/16/23 07:11, Wyes Karny wrote:
> If boost sysfs (/sys/devices/system/cpu/cpufreq/boost) file is present
> turbo-boost is feature is supported in the hardware. By default this
> feature should be enabled. But to disable/enable it write to the sysfs
> file. Use the same to control this feature via cpupower.
>
> To enable:
> cpupower set --turbo-boost 1
>
> To disable:
> cpupower set --turbo-boost 0
>
> Acked-by: Huang Rui <ray.huang@amd.com>
> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
> Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
> tools/power/cpupower/utils/cpupower-set.c | 22 +++++++++++++++++++-
> tools/power/cpupower/utils/helpers/helpers.h | 3 +++
> tools/power/cpupower/utils/helpers/misc.c | 18 ++++++++++++++++
> 3 files changed, 42 insertions(+), 1 deletion(-)
>
> diff --git a/tools/power/cpupower/utils/cpupower-set.c b/tools/power/cpupower/utils/cpupower-set.c
> index c2ba69b7ea54..0677b58374ab 100644
> --- a/tools/power/cpupower/utils/cpupower-set.c
> +++ b/tools/power/cpupower/utils/cpupower-set.c
> @@ -20,6 +20,7 @@ static struct option set_opts[] = {
> {"perf-bias", required_argument, NULL, 'b'},
> {"epp", required_argument, NULL, 'e'},
> {"amd-pstate-mode", required_argument, NULL, 'm'},
> + {"turbo-boost", required_argument, NULL, 't'},
> { },
> };
>
> @@ -41,10 +42,11 @@ int cmd_set(int argc, char **argv)
> int perf_bias:1;
> int epp:1;
> int mode:1;
> + int turbo_boost:1;
> };
> int params;
> } params;
> - int perf_bias = 0;
> + int perf_bias = 0, turbo_boost = 1;
> int ret = 0;
> char epp[30], mode[20];
>
> @@ -94,6 +96,18 @@ int cmd_set(int argc, char **argv)
> }
> params.mode = 1;
> break;
> + case 't':
> + if (params.turbo_boost)
> + print_wrong_arg_exit();
> + turbo_boost = atoi(optarg);
> + if (turbo_boost < 0 || turbo_boost > 1) {
> + printf("--turbo-boost param out of range [0-1]\n");
> + print_wrong_arg_exit();
> + }
> + params.turbo_boost = 1;
> + break;
> +
> +
> default:
> print_wrong_arg_exit();
> }
> @@ -108,6 +122,12 @@ int cmd_set(int argc, char **argv)
> fprintf(stderr, "Error setting mode\n");
> }
>
> + if (params.turbo_boost) {
> + ret = cpupower_set_turbo_boost(turbo_boost);
> + if (ret)
> + fprintf(stderr, "Error setting turbo-boost\n");
> + }
> +
> /* Default is: set all CPUs */
> if (bitmask_isallclear(cpus_chosen))
> bitmask_setall(cpus_chosen);
> diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h
> index d35596631eef..95749b8ee475 100644
> --- a/tools/power/cpupower/utils/helpers/helpers.h
> +++ b/tools/power/cpupower/utils/helpers/helpers.h
> @@ -118,6 +118,7 @@ extern unsigned long long msr_intel_get_turbo_ratio(unsigned int cpu);
>
> extern int cpupower_set_epp(unsigned int cpu, char *epp);
> extern int cpupower_set_amd_pstate_mode(char *mode);
> +extern int cpupower_set_turbo_boost(int turbo_boost);
>
> /* Read/Write msr ****************************/
>
> @@ -180,6 +181,8 @@ static inline int cpupower_set_epp(unsigned int cpu, char *epp)
> { return -1; };
> static inline int cpupower_set_amd_pstate_mode(char *mode)
> { return -1; };
> +static inline int cpupower_set_turbo_boost(int turbo_boost)
> +{ return -1; };
>
> /* Read/Write msr ****************************/
>
> diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c
> index 9df9af8a969e..fc822a0e6b7b 100644
> --- a/tools/power/cpupower/utils/helpers/misc.c
> +++ b/tools/power/cpupower/utils/helpers/misc.c
> @@ -124,6 +124,24 @@ int cpupower_set_amd_pstate_mode(char *mode)
> return 0;
> }
>
> +int cpupower_set_turbo_boost(int turbo_boost)
> +{
> + char path[SYSFS_PATH_MAX];
> + char linebuf[2] = {};
> +
> + snprintf(path, sizeof(path), PATH_TO_CPU "cpufreq/boost");
> +
> + if (!is_valid_path(path))
> + return -1;
> +
> + snprintf(linebuf, sizeof(linebuf), "%d", turbo_boost);
> +
> + if (cpupower_write_sysfs(path, linebuf, 2) <= 0)
> + return -1;
> +
> + return 0;
> +}
> +
> bool cpupower_amd_pstate_enabled(void)
> {
> char *driver = cpufreq_get_driver(0);
^ permalink raw reply [flat|nested] 13+ messages in thread