aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorRicky Liang <jcliang@chromium.org>2016-02-02 01:12:06 +0800
committerJon Medhurst <tixy@linaro.org>2016-04-13 11:44:18 +0100
commita9fbf7ca6407b1081cca7246f73609f51463aaa3 (patch)
tree24eb00bd8a605ab79da872e5ab4c7249d5f39888 /kernel
parent609be734ee75068d4e885c407065e72949b291ca (diff)
FIXUP: sched: scheduler-driven cpu frequency selection
Two fixups that have been reported on LKML. The next version of scheduler-driver cpu frequency selection patch set should include these fixes and we can drop this patch then. Signed-off-by: Ricky Liang <jcliang@chromium.org> Change-Id: Ia2f8b5c0dd5dac06580256eeb4b259929688af68
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/cpufreq_sched.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/sched/cpufreq_sched.c b/kernel/sched/cpufreq_sched.c
index af27a9765f32..9f21c308ef72 100644
--- a/kernel/sched/cpufreq_sched.c
+++ b/kernel/sched/cpufreq_sched.c
@@ -118,6 +118,8 @@ static int cpufreq_sched_thread(void *data)
new_request = gd->requested_freq;
if (new_request == last_request) {
set_current_state(TASK_INTERRUPTIBLE);
+ if (kthread_should_stop())
+ break;
schedule();
} else {
/*
@@ -256,6 +258,7 @@ static int cpufreq_sched_policy_init(struct cpufreq_policy *policy)
pr_debug("%s: throttle threshold = %u [ns]\n",
__func__, gd->throttle_nsec);
+ policy->governor_data = gd;
if (cpufreq_driver_is_slow()) {
cpufreq_driver_slow = true;
gd->task = kthread_create(cpufreq_sched_thread, policy,
@@ -272,12 +275,12 @@ static int cpufreq_sched_policy_init(struct cpufreq_policy *policy)
init_irq_work(&gd->irq_work, cpufreq_sched_irq_work);
}
- policy->governor_data = gd;
set_sched_freq();
return 0;
err:
+ policy->governor_data = NULL;
kfree(gd);
return -ENOMEM;
}