Skip to content

Commit a7aebde

Browse files
committed
Merge tag 'linux-cpupower-5.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux
Pull cpupower utility updates for v5.6 from Shuah Khan: "This cpupower update for Linux 5.6-rc1 consists of a revert from Thomas Renninger and a manpage correction from Brahadambal Srinivasan." * tag 'linux-cpupower-5.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux: Correction to manpage of cpupower cpupower: Revert library ABI changes from commit ae29170
2 parents 6d277ac + 8c30fa7 commit a7aebde

File tree

4 files changed

+90
-26
lines changed

4 files changed

+90
-26
lines changed

tools/power/cpupower/lib/cpufreq.c

Lines changed: 68 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -332,21 +332,74 @@ void cpufreq_put_available_governors(struct cpufreq_available_governors *any)
332332
}
333333

334334

335-
struct cpufreq_frequencies
336-
*cpufreq_get_frequencies(const char *type, unsigned int cpu)
335+
struct cpufreq_available_frequencies
336+
*cpufreq_get_available_frequencies(unsigned int cpu)
337337
{
338-
struct cpufreq_frequencies *first = NULL;
339-
struct cpufreq_frequencies *current = NULL;
338+
struct cpufreq_available_frequencies *first = NULL;
339+
struct cpufreq_available_frequencies *current = NULL;
340340
char one_value[SYSFS_PATH_MAX];
341341
char linebuf[MAX_LINE_LEN];
342-
char fname[MAX_LINE_LEN];
343342
unsigned int pos, i;
344343
unsigned int len;
345344

346-
snprintf(fname, MAX_LINE_LEN, "scaling_%s_frequencies", type);
345+
len = sysfs_cpufreq_read_file(cpu, "scaling_available_frequencies",
346+
linebuf, sizeof(linebuf));
347+
if (len == 0)
348+
return NULL;
347349

348-
len = sysfs_cpufreq_read_file(cpu, fname,
349-
linebuf, sizeof(linebuf));
350+
pos = 0;
351+
for (i = 0; i < len; i++) {
352+
if (linebuf[i] == ' ' || linebuf[i] == '\n') {
353+
if (i - pos < 2)
354+
continue;
355+
if (i - pos >= SYSFS_PATH_MAX)
356+
goto error_out;
357+
if (current) {
358+
current->next = malloc(sizeof(*current));
359+
if (!current->next)
360+
goto error_out;
361+
current = current->next;
362+
} else {
363+
first = malloc(sizeof(*first));
364+
if (!first)
365+
goto error_out;
366+
current = first;
367+
}
368+
current->first = first;
369+
current->next = NULL;
370+
371+
memcpy(one_value, linebuf + pos, i - pos);
372+
one_value[i - pos] = '\0';
373+
if (sscanf(one_value, "%lu", &current->frequency) != 1)
374+
goto error_out;
375+
376+
pos = i + 1;
377+
}
378+
}
379+
380+
return first;
381+
382+
error_out:
383+
while (first) {
384+
current = first->next;
385+
free(first);
386+
first = current;
387+
}
388+
return NULL;
389+
}
390+
391+
struct cpufreq_available_frequencies
392+
*cpufreq_get_boost_frequencies(unsigned int cpu)
393+
{
394+
struct cpufreq_available_frequencies *first = NULL;
395+
struct cpufreq_available_frequencies *current = NULL;
396+
char one_value[SYSFS_PATH_MAX];
397+
char linebuf[MAX_LINE_LEN];
398+
unsigned int pos, i;
399+
unsigned int len;
400+
401+
len = sysfs_cpufreq_read_file(cpu, "scaling_boost_frequencies",
402+
linebuf, sizeof(linebuf));
350403
if (len == 0)
351404
return NULL;
352405

@@ -391,9 +444,9 @@ struct cpufreq_frequencies
391444
return NULL;
392445
}
393446

394-
void cpufreq_put_frequencies(struct cpufreq_frequencies *any)
447+
void cpufreq_put_available_frequencies(struct cpufreq_available_frequencies *any)
395448
{
396-
struct cpufreq_frequencies *tmp, *next;
449+
struct cpufreq_available_frequencies *tmp, *next;
397450

398451
if (!any)
399452
return;
@@ -406,6 +459,11 @@ void cpufreq_put_frequencies(struct cpufreq_frequencies *any)
406459
}
407460
}
408461

462+
void cpufreq_put_boost_frequencies(struct cpufreq_available_frequencies *any)
463+
{
464+
cpufreq_put_available_frequencies(any);
465+
}
466+
409467
static struct cpufreq_affected_cpus *sysfs_get_cpu_list(unsigned int cpu,
410468
const char *file)
411469
{

tools/power/cpupower/lib/cpufreq.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ struct cpufreq_available_governors {
2020
struct cpufreq_available_governors *first;
2121
};
2222

23-
struct cpufreq_frequencies {
23+
struct cpufreq_available_frequencies {
2424
unsigned long frequency;
25-
struct cpufreq_frequencies *next;
26-
struct cpufreq_frequencies *first;
25+
struct cpufreq_available_frequencies *next;
26+
struct cpufreq_available_frequencies *first;
2727
};
2828

2929

@@ -124,11 +124,17 @@ void cpufreq_put_available_governors(
124124
* cpufreq_put_frequencies after use.
125125
*/
126126

127-
struct cpufreq_frequencies
128-
*cpufreq_get_frequencies(const char *type, unsigned int cpu);
127+
struct cpufreq_available_frequencies
128+
*cpufreq_get_available_frequencies(unsigned int cpu);
129129

130-
void cpufreq_put_frequencies(
131-
struct cpufreq_frequencies *first);
130+
void cpufreq_put_available_frequencies(
131+
struct cpufreq_available_frequencies *first);
132+
133+
struct cpufreq_available_frequencies
134+
*cpufreq_get_boost_frequencies(unsigned int cpu);
135+
136+
void cpufreq_put_boost_frequencies(
137+
struct cpufreq_available_frequencies *first);
132138

133139

134140
/* determine affected CPUs

tools/power/cpupower/man/cpupower.1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ all cores
6262
Print the package name and version number.
6363

6464
.SH "SEE ALSO"
65-
cpupower-set(1), cpupower-info(1), cpupower-idle(1),
66-
cpupower-frequency-set(1), cpupower-frequency-info(1), cpupower-monitor(1),
67-
powertop(1)
65+
cpupower-set(1), cpupower-info(1), cpupower-idle-info(1),
66+
cpupower-idle-set(1), cpupower-frequency-set(1), cpupower-frequency-info(1),
67+
cpupower-monitor(1), powertop(1)
6868
.PP
6969
.SH AUTHORS
7070
.nf

tools/power/cpupower/utils/cpufreq-info.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -244,14 +244,14 @@ static int get_boost_mode_x86(unsigned int cpu)
244244

245245
static int get_boost_mode(unsigned int cpu)
246246
{
247-
struct cpufreq_frequencies *freqs;
247+
struct cpufreq_available_frequencies *freqs;
248248

249249
if (cpupower_cpu_info.vendor == X86_VENDOR_AMD ||
250250
cpupower_cpu_info.vendor == X86_VENDOR_HYGON ||
251251
cpupower_cpu_info.vendor == X86_VENDOR_INTEL)
252252
return get_boost_mode_x86(cpu);
253253

254-
freqs = cpufreq_get_frequencies("boost", cpu);
254+
freqs = cpufreq_get_boost_frequencies(cpu);
255255
if (freqs) {
256256
printf(_(" boost frequency steps: "));
257257
while (freqs->next) {
@@ -261,7 +261,7 @@ static int get_boost_mode(unsigned int cpu)
261261
}
262262
print_speed(freqs->frequency);
263263
printf("\n");
264-
cpufreq_put_frequencies(freqs);
264+
cpufreq_put_available_frequencies(freqs);
265265
}
266266

267267
return 0;
@@ -475,15 +475,15 @@ static int get_latency(unsigned int cpu, unsigned int human)
475475

476476
static void debug_output_one(unsigned int cpu)
477477
{
478-
struct cpufreq_frequencies *freqs;
478+
struct cpufreq_available_frequencies *freqs;
479479

480480
get_driver(cpu);
481481
get_related_cpus(cpu);
482482
get_affected_cpus(cpu);
483483
get_latency(cpu, 1);
484484
get_hardware_limits(cpu, 1);
485485

486-
freqs = cpufreq_get_frequencies("available", cpu);
486+
freqs = cpufreq_get_available_frequencies(cpu);
487487
if (freqs) {
488488
printf(_(" available frequency steps: "));
489489
while (freqs->next) {
@@ -493,7 +493,7 @@ static void debug_output_one(unsigned int cpu)
493493
}
494494
print_speed(freqs->frequency);
495495
printf("\n");
496-
cpufreq_put_frequencies(freqs);
496+
cpufreq_put_available_frequencies(freqs);
497497
}
498498

499499
get_available_governors(cpu);

0 commit comments

Comments
 (0)