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.9.51-1+rpi1~8^2~9 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=9809ea5ca25a30de4c21f289559ad8b467cfa1ac;p=linux-4.9.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() returns 1 on success whereas cpufreq_cpu_exists() returned 0 on success. It also 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") Signed-off-by: Ben Hutchings 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 c25a74ae51ba..fd1bb3790ceb 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) != 0) { - 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; }