cpupower: Revert library ABI changes from commit ae2917093f
Commitae2917093f
("tools/power/cpupower: Display boost frequency separately") modified the library function: struct cpufreq_available_frequencies *cpufreq_get_available_frequencies(unsigned int cpu) to struct cpufreq_frequencies *cpufreq_get_frequencies(const char *type, unsigned int cpu) This patch recovers the old API and implements the new functionality in a newly introduce method: struct cpufreq_boost_frequencies *cpufreq_get_available_frequencies(unsigned int cpu) This one should get merged into stable kernels back to 5.0 when the above had been introduced. Fixes:ae2917093f
("tools/power/cpupower: Display boost frequency separately") Cc: stable@vger.kernel.org Signed-off-by: Thomas Renninger <trenn@suse.de> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
parent
b3a987b026
commit
41ddb7e1f7
|
@ -332,20 +332,17 @@ void cpufreq_put_available_governors(struct cpufreq_available_governors *any)
|
|||
}
|
||||
|
||||
|
||||
struct cpufreq_frequencies
|
||||
*cpufreq_get_frequencies(const char *type, unsigned int cpu)
|
||||
struct cpufreq_available_frequencies
|
||||
*cpufreq_get_available_frequencies(unsigned int cpu)
|
||||
{
|
||||
struct cpufreq_frequencies *first = NULL;
|
||||
struct cpufreq_frequencies *current = NULL;
|
||||
struct cpufreq_available_frequencies *first = NULL;
|
||||
struct cpufreq_available_frequencies *current = NULL;
|
||||
char one_value[SYSFS_PATH_MAX];
|
||||
char linebuf[MAX_LINE_LEN];
|
||||
char fname[MAX_LINE_LEN];
|
||||
unsigned int pos, i;
|
||||
unsigned int len;
|
||||
|
||||
snprintf(fname, MAX_LINE_LEN, "scaling_%s_frequencies", type);
|
||||
|
||||
len = sysfs_cpufreq_read_file(cpu, fname,
|
||||
len = sysfs_cpufreq_read_file(cpu, "scaling_available_frequencies",
|
||||
linebuf, sizeof(linebuf));
|
||||
if (len == 0)
|
||||
return NULL;
|
||||
|
@ -391,9 +388,65 @@ struct cpufreq_frequencies
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void cpufreq_put_frequencies(struct cpufreq_frequencies *any)
|
||||
struct cpufreq_available_frequencies
|
||||
*cpufreq_get_boost_frequencies(unsigned int cpu)
|
||||
{
|
||||
struct cpufreq_frequencies *tmp, *next;
|
||||
struct cpufreq_available_frequencies *first = NULL;
|
||||
struct cpufreq_available_frequencies *current = NULL;
|
||||
char one_value[SYSFS_PATH_MAX];
|
||||
char linebuf[MAX_LINE_LEN];
|
||||
unsigned int pos, i;
|
||||
unsigned int len;
|
||||
|
||||
len = sysfs_cpufreq_read_file(cpu, "scaling_boost_frequencies",
|
||||
linebuf, sizeof(linebuf));
|
||||
if (len == 0)
|
||||
return NULL;
|
||||
|
||||
pos = 0;
|
||||
for (i = 0; i < len; i++) {
|
||||
if (linebuf[i] == ' ' || linebuf[i] == '\n') {
|
||||
if (i - pos < 2)
|
||||
continue;
|
||||
if (i - pos >= SYSFS_PATH_MAX)
|
||||
goto error_out;
|
||||
if (current) {
|
||||
current->next = malloc(sizeof(*current));
|
||||
if (!current->next)
|
||||
goto error_out;
|
||||
current = current->next;
|
||||
} else {
|
||||
first = malloc(sizeof(*first));
|
||||
if (!first)
|
||||
goto error_out;
|
||||
current = first;
|
||||
}
|
||||
current->first = first;
|
||||
current->next = NULL;
|
||||
|
||||
memcpy(one_value, linebuf + pos, i - pos);
|
||||
one_value[i - pos] = '\0';
|
||||
if (sscanf(one_value, "%lu", ¤t->frequency) != 1)
|
||||
goto error_out;
|
||||
|
||||
pos = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return first;
|
||||
|
||||
error_out:
|
||||
while (first) {
|
||||
current = first->next;
|
||||
free(first);
|
||||
first = current;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void cpufreq_put_available_frequencies(struct cpufreq_available_frequencies *any)
|
||||
{
|
||||
struct cpufreq_available_frequencies *tmp, *next;
|
||||
|
||||
if (!any)
|
||||
return;
|
||||
|
@ -406,6 +459,11 @@ void cpufreq_put_frequencies(struct cpufreq_frequencies *any)
|
|||
}
|
||||
}
|
||||
|
||||
void cpufreq_put_boost_frequencies(struct cpufreq_available_frequencies *any)
|
||||
{
|
||||
cpufreq_put_available_frequencies(any);
|
||||
}
|
||||
|
||||
static struct cpufreq_affected_cpus *sysfs_get_cpu_list(unsigned int cpu,
|
||||
const char *file)
|
||||
{
|
||||
|
|
|
@ -20,10 +20,10 @@ struct cpufreq_available_governors {
|
|||
struct cpufreq_available_governors *first;
|
||||
};
|
||||
|
||||
struct cpufreq_frequencies {
|
||||
struct cpufreq_available_frequencies {
|
||||
unsigned long frequency;
|
||||
struct cpufreq_frequencies *next;
|
||||
struct cpufreq_frequencies *first;
|
||||
struct cpufreq_available_frequencies *next;
|
||||
struct cpufreq_available_frequencies *first;
|
||||
};
|
||||
|
||||
|
||||
|
@ -124,11 +124,17 @@ void cpufreq_put_available_governors(
|
|||
* cpufreq_put_frequencies after use.
|
||||
*/
|
||||
|
||||
struct cpufreq_frequencies
|
||||
*cpufreq_get_frequencies(const char *type, unsigned int cpu);
|
||||
struct cpufreq_available_frequencies
|
||||
*cpufreq_get_available_frequencies(unsigned int cpu);
|
||||
|
||||
void cpufreq_put_frequencies(
|
||||
struct cpufreq_frequencies *first);
|
||||
void cpufreq_put_available_frequencies(
|
||||
struct cpufreq_available_frequencies *first);
|
||||
|
||||
struct cpufreq_available_frequencies
|
||||
*cpufreq_get_boost_frequencies(unsigned int cpu);
|
||||
|
||||
void cpufreq_put_boost_frequencies(
|
||||
struct cpufreq_available_frequencies *first);
|
||||
|
||||
|
||||
/* determine affected CPUs
|
||||
|
|
|
@ -244,14 +244,14 @@ static int get_boost_mode_x86(unsigned int cpu)
|
|||
|
||||
static int get_boost_mode(unsigned int cpu)
|
||||
{
|
||||
struct cpufreq_frequencies *freqs;
|
||||
struct cpufreq_available_frequencies *freqs;
|
||||
|
||||
if (cpupower_cpu_info.vendor == X86_VENDOR_AMD ||
|
||||
cpupower_cpu_info.vendor == X86_VENDOR_HYGON ||
|
||||
cpupower_cpu_info.vendor == X86_VENDOR_INTEL)
|
||||
return get_boost_mode_x86(cpu);
|
||||
|
||||
freqs = cpufreq_get_frequencies("boost", cpu);
|
||||
freqs = cpufreq_get_boost_frequencies(cpu);
|
||||
if (freqs) {
|
||||
printf(_(" boost frequency steps: "));
|
||||
while (freqs->next) {
|
||||
|
@ -261,7 +261,7 @@ static int get_boost_mode(unsigned int cpu)
|
|||
}
|
||||
print_speed(freqs->frequency);
|
||||
printf("\n");
|
||||
cpufreq_put_frequencies(freqs);
|
||||
cpufreq_put_available_frequencies(freqs);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -475,7 +475,7 @@ static int get_latency(unsigned int cpu, unsigned int human)
|
|||
|
||||
static void debug_output_one(unsigned int cpu)
|
||||
{
|
||||
struct cpufreq_frequencies *freqs;
|
||||
struct cpufreq_available_frequencies *freqs;
|
||||
|
||||
get_driver(cpu);
|
||||
get_related_cpus(cpu);
|
||||
|
@ -483,7 +483,7 @@ static void debug_output_one(unsigned int cpu)
|
|||
get_latency(cpu, 1);
|
||||
get_hardware_limits(cpu, 1);
|
||||
|
||||
freqs = cpufreq_get_frequencies("available", cpu);
|
||||
freqs = cpufreq_get_available_frequencies(cpu);
|
||||
if (freqs) {
|
||||
printf(_(" available frequency steps: "));
|
||||
while (freqs->next) {
|
||||
|
@ -493,7 +493,7 @@ static void debug_output_one(unsigned int cpu)
|
|||
}
|
||||
print_speed(freqs->frequency);
|
||||
printf("\n");
|
||||
cpufreq_put_frequencies(freqs);
|
||||
cpufreq_put_available_frequencies(freqs);
|
||||
}
|
||||
|
||||
get_available_governors(cpu);
|
||||
|
|
Loading…
Reference in New Issue