Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16b7c275 authored by Prarit Bhargava's avatar Prarit Bhargava Committed by Rafael J. Wysocki
Browse files

tools: cpupower: fix return checks for sysfs_get_idlestate_count()



Red Hat and Fedora use a bug reporting tool that gathers data about
"broken" systems called sosreport.  Among other things, it includes the
output of 'cpupower idle-info'.  Executing 'cpupower idle-info' on a
system that has cpuidle disabled via 'cpuidle.off=1' results in a 300
second hang in the cpupower application.

ie)
[root@intel-brickland-05]# cpupower idle-info
Could not determine cpuidle driver

Analyzing CPU 0:
Number of idle states: -19
[hang]

The problem is that the cpupower code only checks for a zero return from
sysfs_get_idlestate_count().  The function can return -ENODEV (-19) as
above.  This patch fixes callers to sysfs_get_idlestate_count() to check
the right return values.

Signed-off-by: default avatarPrarit Bhargava <prarit@redhat.com>
Signed-off-by: default avatarThomas Renninger <trenn@suse.de>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 009d0431
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -22,13 +22,13 @@

static void cpuidle_cpu_output(unsigned int cpu, int verbose)
{
	unsigned int idlestates, idlestate;
	int idlestates, idlestate;
	char *tmp;

	printf(_ ("Analyzing CPU %d:\n"), cpu);

	idlestates = sysfs_get_idlestate_count(cpu);
	if (idlestates == 0) {
	if (idlestates < 1) {
		printf(_("CPU %u: No idle states\n"), cpu);
		return;
	}
@@ -100,10 +100,10 @@ static void cpuidle_general_output(void)
static void proc_cpuidle_cpu_output(unsigned int cpu)
{
	long max_allowed_cstate = 2000000000;
	unsigned int cstate, cstates;
	int cstate, cstates;

	cstates = sysfs_get_idlestate_count(cpu);
	if (cstates == 0) {
	if (cstates < 1) {
		printf(_("CPU %u: No C-states info\n"), cpu);
		return;
	}