From: Ben Hutchings Date: Thu, 3 Nov 2016 21:25:26 +0000 (-0600) Subject: cpupower: Fix checks for CPU existence X-Git-Tag: archive/raspbian/4.16.12-1+rpi1^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=f2a27ce52603956fa28614e2f7a85e61caa7d2c0;p=linux.git cpupower: Fix checks for CPU existence Calls to cpufreq_cpu_exists(cpu) were converted to cpupower_is_cpu_online(cpu) when libcpupower was introduced and the former function was deleted. However, cpupower_is_cpu_online() does not distinguish physically absent and offline CPUs, and does not set errno. cpufreq-set has already been fixed (commit c25badc9ceb6). In cpufreq-bench, which prints an error message for offline CPUs, properly distinguish and report the zero and negative cases. Fixes: ac5a181d065d ("cpupower: Add cpuidle parts into library") Fixes: 53d1cd6b125f ("cpupowerutils: bench - Fix cpu online check") Signed-off-by: Ben Hutchings [carnil: Update/Refresh patch for 4.14.17: The issue with the incorrect check has been fixed with upstream commit 53d1cd6b125f. Keep in the patch the distinction and report for the zero and negative cases.] Gbp-Pq: Topic bugfix/all Gbp-Pq: Name cpupower-fix-checks-for-cpu-existence.patch --- diff --git a/tools/power/cpupower/bench/system.c b/tools/power/cpupower/bench/system.c index 2bb3eef7d5c..fd1bb3790ce 100644 --- a/tools/power/cpupower/bench/system.c +++ b/tools/power/cpupower/bench/system.c @@ -58,12 +58,19 @@ long long int get_time() int set_cpufreq_governor(char *governor, unsigned int cpu) { + int rc; dprintf("set %s as cpufreq governor\n", governor); - if (cpupower_is_cpu_online(cpu) != 1) { - perror("cpufreq_cpu_exists"); - fprintf(stderr, "error: cpu %u does not exist\n", cpu); + rc = cpupower_is_cpu_online(cpu); + if (rc != 1) { + if (rc < 0) + fprintf(stderr, "cpupower_is_cpu_online: %s\n", + strerror(-rc)); + else + fprintf(stderr, + "error: cpu %u is offline or does not exist\n", + cpu); return -1; }