summaryrefslogtreecommitdiff
path: root/drivers/cpuidle/cpuidle.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpuidle/cpuidle.c')
-rw-r--r--drivers/cpuidle/cpuidle.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 7c33193216ea..1850dfc9c9e3 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -251,6 +251,7 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
*/
dev->states_usage[entered_state].time += dev->last_residency;
dev->states_usage[entered_state].usage++;
+ cpuidle_debugfs_update(dev, index);
} else {
dev->last_residency = 0;
}
@@ -406,9 +407,13 @@ int cpuidle_enable_device(struct cpuidle_device *dev)
if (ret)
return ret;
+ ret = cpuidle_debugfs_add_device(dev);
+ if (ret)
+ goto fail_sysfs;
+
if (cpuidle_curr_governor->enable &&
(ret = cpuidle_curr_governor->enable(drv, dev)))
- goto fail_sysfs;
+ goto fail_debugfs;
smp_wmb();
@@ -417,6 +422,8 @@ int cpuidle_enable_device(struct cpuidle_device *dev)
enabled_devices++;
return 0;
+fail_debugfs:
+ cpuidle_debugfs_remove_device(dev);
fail_sysfs:
cpuidle_remove_device_sysfs(dev);
@@ -448,6 +455,7 @@ void cpuidle_disable_device(struct cpuidle_device *dev)
cpuidle_curr_governor->disable(drv, dev);
cpuidle_remove_device_sysfs(dev);
+ cpuidle_debugfs_remove_device(dev);
enabled_devices--;
}
@@ -682,6 +690,12 @@ static int __init cpuidle_init(void)
if (ret)
return ret;
+ ret = cpuidle_debugfs_init();
+ if (ret) {
+ cpuidle_remove_interface(cpu_subsys.dev_root);
+ return ret;
+ }
+
latency_notifier_init(&cpuidle_latency_notifier);
return 0;