summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@linaro.org>2015-12-10 14:58:15 +0100
committerDaniel Lezcano <daniel.lezcano@linaro.org>2016-02-11 10:42:55 +0100
commit9982b97361654a9c06a765cae47828d771c215e1 (patch)
tree9bffd8b5f8f0d99302d43196f9587fd06f9a2291
parent73c571f252212490ab33b1c477ba02c10bf0c309 (diff)
sched-idle: Add a debugfs entry to switch from cpuidle to sched-idleirq-timings-v2
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
-rw-r--r--drivers/cpuidle/debugfs.c55
1 files changed, 49 insertions, 6 deletions
diff --git a/drivers/cpuidle/debugfs.c b/drivers/cpuidle/debugfs.c
index c5aab983d723..af4f77569d86 100644
--- a/drivers/cpuidle/debugfs.c
+++ b/drivers/cpuidle/debugfs.c
@@ -89,6 +89,48 @@ ssize_t cpuidle_debugfs_write_reset(struct file *file,
return size;
}
+static const struct file_operations reset_fops = {
+ .open = simple_open,
+ .write = cpuidle_debugfs_write_reset,
+ .llseek = seq_lseek,
+};
+
+extern void sched_idle_enable(void);
+extern void sched_idle_disable(void);
+extern int sched_idle_enabled(void);
+
+ssize_t cpuidle_debugfs_write_sched_idle(struct file *file,
+ const char __user *user_buf,
+ size_t count, loff_t *ppos)
+{
+ ssize_t size;
+ bool enable = false;
+
+ file->private_data = &enable;
+
+ size = debugfs_write_file_bool(file, user_buf, count, ppos);
+ if (size > 0)
+ enable ? sched_idle_enable() : sched_idle_disable();
+
+ return size;
+}
+
+ssize_t cpuidle_debugfs_read_sched_idle(struct file *file,
+ char __user *user_buf,
+ size_t count, loff_t *ppos)
+{
+ bool enable = sched_idle_enabled();
+ file->private_data = &enable;
+ return debugfs_read_file_bool(file, user_buf, count, ppos);
+}
+
+static const struct file_operations sched_idle_fops = {
+ .open = simple_open,
+ .write = cpuidle_debugfs_write_sched_idle,
+ .read = cpuidle_debugfs_read_sched_idle,
+ .llseek = seq_lseek,
+};
+
void cpuidle_debugfs_prediction(struct cpuidle_driver *drv,
struct cpuidle_device *dev,
s64 duration, int state)
@@ -111,12 +153,6 @@ void cpuidle_debugfs_prediction(struct cpuidle_driver *drv,
}
}
-static const struct file_operations reset_fops = {
- .open = simple_open,
- .write = cpuidle_debugfs_write_reset,
- .llseek = seq_lseek,
-};
-
static int cpuidle_debugfs_stats_show(struct seq_file *m, void *v)
{
int cpu;
@@ -181,6 +217,13 @@ int __init cpuidle_debugfs_init(void)
top_dentry, NULL, &reset_fops))
goto out;
+ /*
+ * Switch to sched-idle
+ */
+ if (!debugfs_create_file("sched-idle", 0200,
+ top_dentry, NULL, &sched_idle_fops))
+ goto out;
+
ret = 0;
out:
if (ret)