tools/power/x86/intel-speed-select: Helpful warning for missing kernel interface

When the device file "/dev/isst_interface" is not present, instead of
failing on access, check at the start and print a helpful warning.

Here CLX platform is an exception, which doesn't depend on the device
file. So continue for CLX platform.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
Srinivas Pandruvada 2020-03-05 14:45:19 -08:00 committed by Andy Shevchenko
parent fb18615828
commit f362cdccca
1 changed files with 24 additions and 10 deletions

View File

@ -2408,6 +2408,8 @@ static void print_version(void)
static void cmdline(int argc, char **argv)
{
const char *pathname = "/dev/isst_interface";
FILE *fp;
int opt;
int option_index = 0;
int ret;
@ -2423,6 +2425,28 @@ static void cmdline(int argc, char **argv)
{ 0, 0, 0, 0 }
};
if (geteuid() != 0) {
fprintf(stderr, "Must run as root\n");
exit(0);
}
ret = update_cpu_model();
if (ret)
err(-1, "Invalid CPU model (%d)\n", cpu_model);
printf("Intel(R) Speed Select Technology\n");
printf("Executing on CPU model:%d[0x%x]\n", cpu_model, cpu_model);
if (!is_clx_n_platform()) {
fp = fopen(pathname, "rb");
if (!fp) {
fprintf(stderr, "Intel speed select drivers are not loaded on this system.\n");
fprintf(stderr, "Verify that kernel config includes CONFIG_INTEL_SPEED_SELECT_INTERFACE.\n");
fprintf(stderr, "If the config is included then this is not a supported platform.\n");
exit(0);
}
fclose(fp);
}
progname = argv[0];
while ((opt = getopt_long_only(argc, argv, "+c:df:hio:v", long_options,
&option_index)) != -1) {
@ -2457,20 +2481,10 @@ static void cmdline(int argc, char **argv)
}
}
if (geteuid() != 0) {
fprintf(stderr, "Must run as root\n");
exit(0);
}
if (optind > (argc - 2)) {
fprintf(stderr, "Feature name and|or command not specified\n");
exit(0);
}
ret = update_cpu_model();
if (ret)
err(-1, "Invalid CPU model (%d)\n", cpu_model);
printf("Intel(R) Speed Select Technology\n");
printf("Executing on CPU model:%d[0x%x]\n", cpu_model, cpu_model);
set_max_cpu_num();
store_cpu_topology();
set_cpu_present_cpu_mask();