diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-10-20 18:37:45 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-10-20 18:37:44 -0700 |
| commit | cc0c20f3fa7cd33e5c7f0c673b65005c637ce2fe (patch) | |
| tree | f2ae24404310f1e232724b8b014a8cdc513395c3 /kernel | |
| parent | 8456550a58cf7d3d4123fc068fc0109d4f72a848 (diff) | |
| parent | 76ac2a28035f2c5648fd5fb4babcd94ca1c73b2b (diff) | |
Merge "sched/core_ctl: Move header file to global location"
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/core.c | 2 | ||||
| -rw-r--r-- | kernel/sched/core_ctl.c | 33 | ||||
| -rw-r--r-- | kernel/sched/core_ctl.h | 24 | ||||
| -rw-r--r-- | kernel/sched/hmp.c | 2 |
4 files changed, 30 insertions, 31 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 7e7e19ed53c6..53f7b50b7541 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -75,6 +75,7 @@ #include <linux/context_tracking.h> #include <linux/compiler.h> #include <linux/irq.h> +#include <linux/sched/core_ctl.h> #include <asm/switch_to.h> #include <asm/tlb.h> @@ -85,7 +86,6 @@ #endif #include "sched.h" -#include "core_ctl.h" #include "../workqueue_internal.h" #include "../smpboot.h" diff --git a/kernel/sched/core_ctl.c b/kernel/sched/core_ctl.c index d81886da7ca2..0db85a4fa9c8 100644 --- a/kernel/sched/core_ctl.c +++ b/kernel/sched/core_ctl.c @@ -45,7 +45,7 @@ struct cluster_data { bool nrrun_changed; struct task_struct *core_ctl_thread; unsigned int first_cpu; - bool boost; + unsigned int boost; struct kobject kobj; }; @@ -652,17 +652,40 @@ static bool do_check(u64 wallclock) return do_check; } -void core_ctl_set_boost(bool boost) +int core_ctl_set_boost(bool boost) { unsigned int index = 0; struct cluster_data *cluster; + unsigned long flags; + int ret = 0; + bool boost_state_changed = false; + spin_lock_irqsave(&state_lock, flags); for_each_cluster(cluster, index) { - if (cluster->is_big_cluster && cluster->boost != boost) { - cluster->boost = boost; - apply_need(cluster); + if (cluster->is_big_cluster) { + if (boost) { + boost_state_changed = !cluster->boost; + ++cluster->boost; + } else { + if (!cluster->boost) { + pr_err("Error turning off boost. Boost already turned off\n"); + ret = -EINVAL; + } else { + --cluster->boost; + boost_state_changed = !cluster->boost; + } + } + break; } } + spin_unlock_irqrestore(&state_lock, flags); + + if (boost_state_changed) + apply_need(cluster); + + trace_core_ctl_set_boost(cluster->boost, ret); + + return ret; } void core_ctl_check(u64 wallclock) diff --git a/kernel/sched/core_ctl.h b/kernel/sched/core_ctl.h deleted file mode 100644 index 3b0c12acb9c0..000000000000 --- a/kernel/sched/core_ctl.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2016, The Linux Foundation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 and - * only version 2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef __CORE_CTL_H -#define __CORE_CTL_H - -#ifdef CONFIG_SCHED_CORE_CTL -void core_ctl_check(u64 wallclock); -void core_ctl_set_boost(bool boost); -#else -static inline void core_ctl_check(u64 wallclock) {} -static inline void core_ctl_set_boost(bool boost) {} -#endif -#endif diff --git a/kernel/sched/hmp.c b/kernel/sched/hmp.c index 7039eb8f1e63..d220482f4dbc 100644 --- a/kernel/sched/hmp.c +++ b/kernel/sched/hmp.c @@ -18,9 +18,9 @@ #include <linux/list_sort.h> #include <linux/syscore_ops.h> #include <linux/of.h> +#include <linux/sched/core_ctl.h> #include "sched.h" -#include "core_ctl.h" #include <trace/events/sched.h> |
