mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
d80a4ac208
Cpupower tool has set and info options which are being used only by x86 machines. This patch removes support for these two subcommands from cpupower utility for POWER. Thus, these two subcommands will now be available only for intel. This removes the ambiguous error message while using set option in case of using non-intel systems. Without this patch on a POWER system: root@ubuntu:~# cpupower info System does not support Intel's performance bias setting root@ubuntu:~# cpupower set -b 10 Error setting perf-bias value on CPU With this patch on a POWER box: root@ubuntu:~# cpupower info Subcommand not supported on POWER Same result for set subcommand. This patch does not affect results on a intel box. Signed-off-by: Abhishek Goel <huntbag@linux.vnet.ibm.com> Acked-by: Thomas Renninger <trenn@suse.de> Reviewed-by: Shuah Khan <skhan@linuxfoundation.org> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
108 lines
2.1 KiB
C
108 lines
2.1 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* (C) 2011 Thomas Renninger <trenn@suse.de>, Novell Inc.
|
|
*/
|
|
|
|
|
|
#include <unistd.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
#include <getopt.h>
|
|
#include <sys/utsname.h>
|
|
|
|
#include "helpers/helpers.h"
|
|
#include "helpers/sysfs.h"
|
|
#include "helpers/bitmask.h"
|
|
|
|
static struct option set_opts[] = {
|
|
{"perf-bias", required_argument, NULL, 'b'},
|
|
{ },
|
|
};
|
|
|
|
static void print_wrong_arg_exit(void)
|
|
{
|
|
printf(_("invalid or unknown argument\n"));
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
int cmd_set(int argc, char **argv)
|
|
{
|
|
extern char *optarg;
|
|
extern int optind, opterr, optopt;
|
|
unsigned int cpu;
|
|
struct utsname uts;
|
|
|
|
union {
|
|
struct {
|
|
int perf_bias:1;
|
|
};
|
|
int params;
|
|
} params;
|
|
int perf_bias = 0;
|
|
int ret = 0;
|
|
|
|
ret = uname(&uts);
|
|
if (!ret && (!strcmp(uts.machine, "ppc64le") ||
|
|
!strcmp(uts.machine, "ppc64"))) {
|
|
fprintf(stderr, _("Subcommand not supported on POWER.\n"));
|
|
return ret;
|
|
}
|
|
|
|
setlocale(LC_ALL, "");
|
|
textdomain(PACKAGE);
|
|
|
|
params.params = 0;
|
|
/* parameter parsing */
|
|
while ((ret = getopt_long(argc, argv, "b:",
|
|
set_opts, NULL)) != -1) {
|
|
switch (ret) {
|
|
case 'b':
|
|
if (params.perf_bias)
|
|
print_wrong_arg_exit();
|
|
perf_bias = atoi(optarg);
|
|
if (perf_bias < 0 || perf_bias > 15) {
|
|
printf(_("--perf-bias param out "
|
|
"of range [0-%d]\n"), 15);
|
|
print_wrong_arg_exit();
|
|
}
|
|
params.perf_bias = 1;
|
|
break;
|
|
default:
|
|
print_wrong_arg_exit();
|
|
}
|
|
};
|
|
|
|
if (!params.params)
|
|
print_wrong_arg_exit();
|
|
|
|
/* Default is: set all CPUs */
|
|
if (bitmask_isallclear(cpus_chosen))
|
|
bitmask_setall(cpus_chosen);
|
|
|
|
/* loop over CPUs */
|
|
for (cpu = bitmask_first(cpus_chosen);
|
|
cpu <= bitmask_last(cpus_chosen); cpu++) {
|
|
|
|
if (!bitmask_isbitset(cpus_chosen, cpu))
|
|
continue;
|
|
|
|
if (sysfs_is_cpu_online(cpu) != 1){
|
|
fprintf(stderr, _("Cannot set values on CPU %d:"), cpu);
|
|
fprintf(stderr, _(" *is offline\n"));
|
|
continue;
|
|
}
|
|
|
|
if (params.perf_bias) {
|
|
ret = msr_intel_set_perf_bias(cpu, perf_bias);
|
|
if (ret) {
|
|
fprintf(stderr, _("Error setting perf-bias "
|
|
"value on CPU %d\n"), cpu);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|