diff options
Diffstat (limited to 'drivers/cpuidle/cpuidle.c')
-rw-r--r-- | drivers/cpuidle/cpuidle.c | 16 |
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; |