| From foo@baz Thu Feb 1 13:58:04 CET 2018 |
| From: Abhishek Goel <huntbag@linux.vnet.ibm.com> |
| Date: Wed, 15 Nov 2017 14:10:02 +0530 |
| Subject: cpupower : Fix cpupower working when cpu0 is offline |
| |
| From: Abhishek Goel <huntbag@linux.vnet.ibm.com> |
| |
| |
| [ Upstream commit dbdc468f35ee827cab2753caa1c660bdb832243a ] |
| |
| cpuidle_monitor used to assume that cpu0 is always online which is not |
| a valid assumption on POWER machines. This patch fixes this by getting |
| the cpu on which the current thread is running, instead of always using |
| cpu0 for monitoring which may not be online. |
| |
| Signed-off-by: Abhishek Goel <huntbag@linux.vnet.ibm.com> |
| Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| tools/power/cpupower/utils/idle_monitor/cpuidle_sysfs.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| --- a/tools/power/cpupower/utils/idle_monitor/cpuidle_sysfs.c |
| +++ b/tools/power/cpupower/utils/idle_monitor/cpuidle_sysfs.c |
| @@ -130,15 +130,18 @@ static struct cpuidle_monitor *cpuidle_r |
| { |
| int num; |
| char *tmp; |
| + int this_cpu; |
| + |
| + this_cpu = sched_getcpu(); |
| |
| /* Assume idle state count is the same for all CPUs */ |
| - cpuidle_sysfs_monitor.hw_states_num = cpuidle_state_count(0); |
| + cpuidle_sysfs_monitor.hw_states_num = cpuidle_state_count(this_cpu); |
| |
| if (cpuidle_sysfs_monitor.hw_states_num <= 0) |
| return NULL; |
| |
| for (num = 0; num < cpuidle_sysfs_monitor.hw_states_num; num++) { |
| - tmp = cpuidle_state_name(0, num); |
| + tmp = cpuidle_state_name(this_cpu, num); |
| if (tmp == NULL) |
| continue; |
| |
| @@ -146,7 +149,7 @@ static struct cpuidle_monitor *cpuidle_r |
| strncpy(cpuidle_cstates[num].name, tmp, CSTATE_NAME_LEN - 1); |
| free(tmp); |
| |
| - tmp = cpuidle_state_desc(0, num); |
| + tmp = cpuidle_state_desc(this_cpu, num); |
| if (tmp == NULL) |
| continue; |
| strncpy(cpuidle_cstates[num].desc, tmp, CSTATE_DESC_LEN - 1); |